Sftp OutboundAdapter с несколькими папками - PullRequest
0 голосов
/ 15 января 2019

Мне нужно перенести файл из Local в несколько папок сервера 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 голосов
/ 16 января 2019

Нет, это невозможно с одним 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")))
                )
...