【发布时间】:2020-11-27 09:32:28
【问题描述】:
下面是我正在使用的配置
@Autowired
private SftpRemoteFileTemplate outboundTemplate;
@Autowired
private SftpConfig config;
@Bean
@ServiceActivator(inputChannel = "sftpOutputGenericChannel")
public MessageHandler simplehandler() {
SftpMessageHandler handler = new SftpMessageHandler(outboundTemplate, FileExistsMode.APPEND);
handler.setRemoteDirectoryExpression(new LiteralExpression(config.getDirectory()));
handler.setFileNameGenerator((Message<?> message) -> ((String) message.getHeaders().get(KEY)));
handler.setUseTemporaryFileName(false);
return handler;
}
我在单独的 Config 类中创建了 Sessionfactory、CachingSessionfactory 和 SftpRemoteFileTemplte,它们正在正确实例化,下面是相同的日志。
2020-11-27 01:15:17.742 [main] o.s.b.f.s.DefaultListableBeanFactory : Creating shared instance of singleton bean 'cachingSessionFactory'
2020-11-27 01:15:17.744 [main] o.s.b.f.s.DefaultListableBeanFactory : Creating shared instance of singleton bean 'sftpSessionFactory'
2020-11-27 01:15:17.778 [main] o.s.b.f.s.DefaultListableBeanFactory : Autowiring by type from bean name 'cachingSessionFactory' via factory method to bean named 'sftpSessionFactory'
2020-11-27 01:15:17.783 [main] o.s.integration.util.SimplePool : Target pool size changed by -2147483637, now 10
2020-11-27 01:15:54.434 [main] o.s.b.f.s.DefaultListableBeanFactory : Creating shared instance of singleton bean 'outboundTemplate'
2020-11-27 01:15:54.435 [main] o.s.b.f.s.DefaultListableBeanFactory : Autowiring by type from bean name 'outboundTemplate' via factory method to bean named 'cachingSessionFactory'
当我执行此代码时,Spring DEBUG 日志显示文件已成功发送到服务器,但实际上文件没有上传到服务器。
但如果我将MessageHandler 的实现更改为,
SftpMessageHandler handler = new SftpMessageHandler(new SftpRemoteFileTemplate(cachingSessionFactory), FileExistsMode.APPEND);
它开始工作,文件实际上被上传到服务器,不知道为什么会这样?
当我将@Autowired SftpRemoteFileTemplate 与handler.setRemoteDirectoryExpressionString("headers['remote_directory']") 一起使用时,再观察一次,效果非常好。
我想了解 SftpRemoteTemplate 在此处的工作方式以及建议的最佳做法是什么?
注意:SpringBoot v2.4.0 Spring 集成:5.4.1,在引导 v2.2.6.RELEASE 时遇到了类似的问题
【问题讨论】:
标签: java spring spring-boot spring-integration spring-integration-sftp