我需要将文件从本地传输到多个sftp服务器文件夹。 到目前为止,这是我的代码,我将通过单个通道一对一传输:
private IntegrationFlow localToRemotePush(final String localDirectory,String remoteDirectory, String adapterName) {
return IntegrationFlows
.from(Files.inboundAdapter(Paths.get(localDirectory).toFile())
.regexFilter(FILE_PATTERN_REGEX)
.preventDuplicates(false),
e -> {
e.poller(Pollers.fixedDelay(getPollerIntervalMs())
.maxMessagesPerPoll(getMaxFetchSize())
.errorChannel("errorChannel")
.transactional(transactionManager)
.transactionSynchronizationFactory(mmPushSftpSyncFactory()) // moves processed files
).id(adapterName);
})
.handle(Sftp.outboundAdapter(mmPushSftpSessionFactory())
.remoteDirectory(getRemoteRootDir() + remoteDirectory1)
//.remoteDirectory(getRemoteRootDir() + remoteDirectory2) --- this way is correct ?
.temporaryFileSuffix(".tmp"))
.get();
}
是否可以使用单个通道将本地文件从一个本地文件夹传输到多个sftp文件夹?
答案 0 :(得分:0)
否,单个Sftp.outboundAdapter()
是不可能的。它仅用于单个远程目录,但是可以通过功能或表达式从请求消息中确定。但这是另一回事。
您可以通过为每个远程目录使用多个Sftp.outboundAdapter()
和publishSubscribe
配置来完成您的任务。像这样:
.publishSubscribeChannel(s -> s
.subscribe(f -> f
.handle(Sftp.outboundAdapter(mmPushSftpSessionFactory())
.remoteDirectory(getRemoteRootDir() + remoteDirectory1)
.temporaryFileSuffix(".tmp")))
.subscribe(f -> f
.handle(Sftp.outboundAdapter(mmPushSftpSessionFactory())
.remoteDirectory(getRemoteRootDir() + remoteDirectory2)
.temporaryFileSuffix(".tmp")))
)