Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Spring集成Sftp:有时需要超过15分钟才能完成操作_Spring Boot_Spring Integration_Jsch_Spring Integration Sftp - Fatal编程技术网

Spring boot Spring集成Sftp:有时需要超过15分钟才能完成操作

Spring boot Spring集成Sftp:有时需要超过15分钟才能完成操作,spring-boot,spring-integration,jsch,spring-integration-sftp,Spring Boot,Spring Integration,Jsch,Spring Integration Sftp,我使用SpringIntegrationSFTP将文件放在远程服务器上,下面是配置 <spring-integration.version>5.2.5.RELEASE</spring-integration.version> 这是SessionFactory的配置 public SessionFactory<LsEntry> sftpSessionFactory() { DefaultSftpSessionFactory factory = new

我使用SpringIntegrationSFTP将文件放在远程服务器上,下面是配置

<spring-integration.version>5.2.5.RELEASE</spring-integration.version>
这是SessionFactory的配置

public SessionFactory<LsEntry> sftpSessionFactory() {
    DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory();
    factory.setHost(host);
    factory.setPort(port);
    factory.setUser(username);
    factory.setPassword(password);
    factory.setAllowUnknownKeys(true);
    factory.setKnownHosts(host);
    factory.setSessionConfig(configPropertiesOutbound());
    CachingSessionFactory<LsEntry> csf = new CachingSessionFactory<LsEntry>(factory);
    csf.setSessionWaitTimeout(1000);
    csf.setPoolSize(10);
    csf.setTestSession(true);
    return csf;
}
public SessionFactory sftpSessionFactory(){
DefaultSftpSessionFactory=新的DefaultSftpSessionFactory();
setHost(主机);
工厂设置端口(端口);
setUser(用户名);
出厂设置密码(密码);
工厂。setAllowUnknownKeys(真);
factory.setKnownHosts(主机);
setSessionConfig(configPropertiesOutbound());
CachingSessionFactory csf=新CachingSessionFactory(工厂);
csf.setSessionWaitTimeout(1000);
集落池大小(10);
csf.setTestSession(true);
返回脑脊液;
}
我已经在其中一个服务中配置了所有这些

现在问题是,

有时整个操作需要15分钟以上,特别是如果服务在几个小时内都很理想,我不确定是什么原因导致此问题。 看起来它在从CachedSessionFactory获取活动会话上花费了很多时间。操作非常快,下面是一个工具的快照,我在其中捕获了时间

传输文件通常需要几毫秒的时间

我最近做了以下修改,但在此之前我也收到了同样的问题

  • 我之前已经将isShareSession设置为false,它是DefaultSftpSessionFactory=new DefaultSftpSessionFactory(true)
  • 没有池大小,我已将其设置为10
我想我配置了一些错误的东西,这就是为什么我最终会堆积连接?还是有别的事

观察:

当问题发生时,完成操作所需的时间大致相同,即938000毫秒+


如果我每天重新启动应用程序,它就可以正常工作。

5.2.5.发布版
-我想知道您是否能够升级到最新的
5.2.9
,或者直接升级到
5.4.1
:。看看它是如何工作的。可能我们之间有一些漏洞修复。当然我会尝试一下,在重构代码之前还有一件事,我已经从sessionFactory和SftpRemoteTemplate中删除了@bean,并且只将MessageHandler保留在容器中,假设它可以处理这两个问题,您认为这会导致问题吗?所有这些配置都是同一个类的一部分。不,它们必须声明为bean。处理人员没有责任关注其生命周期
@Bean
@ServiceActivator(inputChannel = "sftpOutputChannel" )
public MessageHandler genericOutboundhandler() {
    SftpMessageHandler handler = new SftpMessageHandler(outboundTemplate(), FileExistsMode.APPEND);
    handler.setRemoteDirectoryExpressionString("headers['remote_directory']");
    handler.setFileNameGenerator((Message<?> message) -> ((String) message.getHeaders().get(Constant.FILE_NAME_KEY)));
    handler.setUseTemporaryFileName(false);
    return handler;
}
private SftpRemoteFileTemplate outboundTemplate;

public SftpRemoteFileTemplate outboundTemplate(){
    if (outboundTemplate == null) {
        outboundTemplate = new SftpRemoteFileTemplate(sftpSessionFactory());
    }
    return outboundTemplate;
}
public SessionFactory<LsEntry> sftpSessionFactory() {
    DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory();
    factory.setHost(host);
    factory.setPort(port);
    factory.setUser(username);
    factory.setPassword(password);
    factory.setAllowUnknownKeys(true);
    factory.setKnownHosts(host);
    factory.setSessionConfig(configPropertiesOutbound());
    CachingSessionFactory<LsEntry> csf = new CachingSessionFactory<LsEntry>(factory);
    csf.setSessionWaitTimeout(1000);
    csf.setPoolSize(10);
    csf.setTestSession(true);
    return csf;
}