пружинная интеграция sftp канал - PullRequest
0 голосов
/ 11 января 2019

В sftp remote - у меня есть 2 папки [ready] и [process]. Сначала мне нужно переместить файл из готового к обработке, затем переместить этот файл в локальный каталог по одному каналу. Пожалуйста, проверьте мой код, это правильно? мой код работает нормально, но я сомневаюсь, что сначала он перемещается в удаленный процесс или локальную папку, которая происходит в первую очередь?

@Bean
public IntegrationFlow remoteToLocal() {
    return IntegrationFlows
            .from(Sftp.inboundAdapter(sftpSessionFactory())
                            .remoteDirectory(sftpProperties.getRemoteRootDir() + "/ready")
                            .regexFilter(FILE_PATTERN_REGEX)
                            .deleteRemoteFiles(true)
                            .localDirectory(new File(mmFileProperties.getMcfItes()+ mmFileProperties.getInboundDirectory()))
                            .preserveTimestamp(true)
                            .temporaryFileSuffix(".tmp"),
                    e -> e.poller(Pollers.fixedDelay(sftpProperties.getPollerIntervalMs()))
                            .id("sftpInboundAdapter"))
            .handle(Sftp.outboundAdapter(mmSftpSessionFactory())
                    .remoteDirectory(sftpProperties.getRemoteRootDir() + "/process")
                    .temporaryFileSuffix(".tmp"))

            .get();
}

Пожалуйста, проверьте новый код, но он не работает

private StandardIntegrationFlow remoteToLocalFlow(final String localDirectory, final String remoteDirectoryProcessing, final String adapterName) {
        return IntegrationFlows
            .from(Sftp.inboundAdapter(mmSftpSessionFactory())
                            .remoteDirectory(remoteRootDir + remoteDirectoryProcessing)
                            .regexFilter(FILE_PATTERN_REGEX)
                            .deleteRemoteFiles(true)
                            .localDirectory(Paths.get(localDirectory).toFile())
                            .preserveTimestamp(true)
                            .temporaryFileSuffix(".tmp"),
                    e -> {
                        e.poller(Pollers.fixedDelay(mmSftpProperties.getPollerIntervalMs()))
                                .id(adapterName);
                    })
            .handle(m -> logger.trace("File received from sftp interface: {}", m))
            .handleWithAdapter(h -> h.sftpGateway(sftpSessionFactory(),AbstractRemoteFileOutboundGateway.Command.MV, "payload")
            .renameExpression(remoteRootDir + ready) 
            .localDirectoryExpression(remoteRootDir + process)).get(); }

1 Ответ

0 голосов
/ 11 января 2019

Это выглядит хорошо, но это не лучший способ сделать это; Вы копируете файл, удаляете его и отправляете обратно с другим именем.

Вместо этого используйте SftpOutboundGateway с командой MV (перемещение) .

Вы также можете использовать шлюз для просмотра и получения файлов.

...