sftp spring集成 - 从远程拉取文件

时间:2015-12-02 15:52:28

标签: spring-integration spring-batch sftp

我想将文件从远程服务器拉到我的本地。我正在使用Spring Integration SFTP来提取文件。我有以下配置:

<sftp:inbound-channel-adapter id="sftpAdapterAutoCreate"
        session-factory="sftpSessionFactory" channel="inputChannel"
        filename-pattern="*.txt" remote-directory="/remotedir"
        local-directory="file:target/foo" auto-create-local-directory="true"

        delete-remote-files="false"  >
          <int:poller fixed-rate="30000" /> 

</sftp:inbound-channel-adapter>

我不想在成功拉动后从remotedir删除文件。这里发生的事情是每30秒,来自遥控器的文件被拉到我的本地。我希望Spring批处理程序在第一次之后停止,而不是再次拉同一个文件。 我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

入站通道适配器使用目录同步的概念;如果您的流删除了该文件,将重新获取该文件以同步本地目录。但是,它不会作为消息发出,因为local-filter是AcceptOnceFileListFilter。但是,这不会在系统重启后继续存在。

您可以使用CompositeFileListFilter包含SftpPersistentAcceptOnceFileListFilterSftpSimplePatternFileListFilter。这将阻止重新获取并将在系统重启后继续存在;但是,它需要MetadataStore来存储状态。

要仅运行一次,您可以使用FireOnceTrigger并将max-messages-per-poll设置为-1,以便在单次投票时获取所有文件。

您还可以考虑使用出站网关get仅使用您想要的文件。