我想将文件从远程服务器拉到我的本地。我正在使用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批处理程序在第一次之后停止,而不是再次拉同一个文件。 我怎样才能做到这一点?
答案 0 :(得分:0)
入站通道适配器使用目录同步的概念;如果您的流删除了该文件,将重新获取该文件以同步本地目录。但是,它不会作为消息发出,因为local-filter是AcceptOnceFileListFilter
。但是,这不会在系统重启后继续存在。
您可以使用CompositeFileListFilter
包含SftpPersistentAcceptOnceFileListFilter
和SftpSimplePatternFileListFilter
。这将阻止重新获取并将在系统重启后继续存在;但是,它需要MetadataStore
来存储状态。
要仅运行一次,您可以使用FireOnceTrigger并将max-messages-per-poll
设置为-1
,以便在单次投票时获取所有文件。
您还可以考虑使用出站网关get
仅使用您想要的文件。