Spring boot 自动创建不存在的目录Spring集成SFTP

Spring boot 自动创建不存在的目录Spring集成SFTP,spring-boot,spring-el,spring-integration-sftp,Spring Boot,Spring El,Spring Integration Sftp,目前,我将此配置用于Spring集成SFTP: @Bean @ServiceActivator(inputChannel = "toSftpChannel") public MessageHandler handler() { final SftpMessageHandler handler = new SftpMessageHandler(sftpSessionFactory()); handler.setRemoteDirectoryExpressionString(

目前,我将此配置用于Spring集成SFTP:

@Bean
  @ServiceActivator(inputChannel = "toSftpChannel")
  public MessageHandler handler() {
    final SftpMessageHandler handler = new SftpMessageHandler(sftpSessionFactory());
    handler.setRemoteDirectoryExpressionString("\'" + properties.getFolder() + "\'"
        + ".concat(headers['region'])");
    handler.setAutoCreateDirectory(true);
    return handler;
  }
所有这些都有效,但有时我会有例外

MessageDeliveryException: Failed to transfer file [/test/home-dir/feed.xml -> feed.xml] from local directory to remote directory.; nested exception is org.springframework.core.NestedIOException: failed to create remote directory '/test-sftp'.; nested exception is 4: 
    at org.springframework.integration.file.remote.RemoteFileTemplate.doSend(RemoteFileTemplate.java:347)
    at org.springframework.integration.file.remote.RemoteFileTemplate.lambda$send$0(RemoteFileTemplate.java:298)
    at org.springframework.integration.file.remote.RemoteFileTemplate.execute(RemoteFileTemplate.java:437)
    at org.springframework.integration.file.remote.RemoteFileTemplate.send(RemoteFileTemplate.java:298)
    at org.springframework.integration.file.remote.RemoteFileTemplate.send(RemoteFileTemplate.java:286)
    at org.springframework.integration.file.remote.RemoteFileTemplate.send(RemoteFileTemplate.java:278)
    at org.springframework.integration.file.remote.handler.FileTransferringMessageHandler.handleMessageInternal(FileTransferringMessageHandler.java:205)
主要的问题是,我已经有了目录
/test sftp
,奇怪的是,在
properties.getFolder()(application.properties)
中,我设置了
/test sftp/dir/
,但得到了大约一半路径的异常。这怎么可能? 我的目标是从创建中排除这部分路径。是否可以仅从
标题['region']
创建目录。 实例我有
/test sftp/dir/
,只需要创建
/test sftp/dir/one
/test sftp/dir/two
。但是如果
/test sftp/dir/
中的dir不存在,那么就失败了


另外,我拥有所有访问权限,并且从100次中仅5次未能将文件上载到SFTP(所有目录都存在)。

您需要显示整个堆栈跟踪;这里不要截断堆栈跟踪

但是得到一个例外,大约一半的路径


SFTP不支持一步创建目录树;我们必须递归地创建它们。请参阅
RemoteFileUtils.makeDirectories()

。我们使用了具有许多防火墙的客户SFTP。我们的原因是:管道关闭了,所以,似乎sftp关闭了长时间运行的开放会话,而spring集成sftp并没有很快意识到这一点。
因此,解决方案是暂时删除CachingSessionFactory。现在一切都正常了。

谢谢Gary的回答,你们的建议帮了我很多,但这次问题出在客户方面