具有多个文件夹的Sftp OutboundAdapter

时间:2019-01-15 17:58:57

标签: java spring-integration sftp spring-integration-sftp

我需要将文件从本地传输到多个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文件夹?

1 个答案:

答案 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")))
                )