首页 文章

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

提问于
浏览
0

我想将文件从远程服务器拉到我的本地 . 我正在使用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

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

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

    要只运行一次,您可以使用FireOnceTrigger并将 max-messages-per-poll 设置为 -1 ,以便在单个轮询中获取所有文件 .

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

相关问题