ChannelSftp启动项目时自动注入,当有错误后链接不能再用怎么重新让他注入bean节点

@Configuration
public class FileUploadConfig {
    @Autowired
    private SftpCofig sftpCofig;
    @Autowired
    private MagConfig magConfig;

    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory config = new MultipartConfigFactory();
        config.setMaxFileSize("200MB");
        config.setMaxRequestSize("200MB");
        return config.createMultipartConfig();
    }

    @Bean
    public ChannelSftp getSftp() {
        //if(client==null||session==null||!client.isConnected()||!session.isConnected()){
        try {
            JSch jsch = new JSch();
//                if (privateKey != null) {
//                    jsch.addIdentity(privateKey);// 设置私钥    
//                }
            Session session = jsch.getSession(sftpCofig.getUsername(), sftpCofig.getIp(), sftpCofig.getPort());
            if (sftpCofig.getPassword() != null) {
                session.setPassword(sftpCofig.getPassword());
            }
            Properties config = new Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);
            session.connect();
            Channel channel = session.openChannel("sftp");
            channel.connect();
            ChannelSftp client = (ChannelSftp) channel;
            client.cd(magConfig.getFileBasePath() +magConfig.getFiledir());
            Logger.info(this, "sftp服务器连接成功");
            return client;
        } catch (JSchException e) {
            Logger.error(this, "sftp登录失败,检测登录ip,端口号,用户名密码是否正确,错误信息为" + e.getMessage());
        } catch (SftpException e) {
            Logger.error(this, "sftp文件下载,目录不存在,错误信息" + e.getMessage());
        }
        //}

        return null;
    }

}

使用的时候直接@Auto注入进去。当有错误使怎么让他重新注入一遍bean节点

没读懂啥意思。

就是我启动项目的时候不是把这个ChannelSftp 注入到bean节点了么。然后我在使用的时候直接

    @Autowired
    private ChannelSftp sftp;
    pubic BaseResponse getPage(String downloadFile){
    InputStream inputStream=null;
            try{
                inputStream=sftp.get(downloadFile);
            }catch (Exception ex){
                Logger.info(this,"图片获取失败");
                return BaseResponse.failure(TaskErrorEnum.PHOTO_DOWNLOAD_ERROR);
            }
            if (isStr){
                String Base=getBase64FromInputStream(inputStream);
                return new BaseResponse(TaskErrorCode.SUUCCESS,TaskErrorEnum.SUCCESS.getMessage(),Base);
            }else{
                return new BaseResponse(TaskErrorCode.SUUCCESS,TaskErrorEnum.SUCCESS.getMessage(),inputStream);
            }
    }

如果我的sftp.get(downloadFile);获取的是我服务器没有的图片那么我的sftp连接就会被关闭。下次调用就不是打开的状态。能不能我报错的时候再次把最开始注入的bean节点重新注入以下。把这个连接在打开

你把 ChannelSftp 通过工厂方法获取。

ChannelSftp sftp =SpringContextHolder.getBean(“ChannelSftp”);
这样么 如果这样那报错的话连接不还是关闭的么

不是这样的。类似于这样!

ChannelSftp channelSftp = ChannelSftpFactory .getChannelSftp()

是每次获取都重新加载一遍这样么,类似于懒汉模式那样

ChannelSftp ,应该是一次请求一个连接啊,并不是单例。每次都创建一个新的。

我们以前是这样做的。刚开始每次连接慢。我们就给做成单个连接了。现在改成这样了又