我想将文件从远程服务器拉到我的本地 . 我正在使用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 回答
入站通道适配器使用目录同步的概念;如果您的流删除了该文件,将重新获取该文件以同步本地目录 . 但是,它不会作为消息发出,因为local-filter是
AcceptOnceFileListFilter
. 但是,这不会在系统重启后继续存在 .您可以使用
CompositeFileListFilter
包含SftpPersistentAcceptOnceFileListFilter
和SftpSimplePatternFileListFilter
. 这将阻止重新获取并将在系统重启后继续存在;但是,它需要一个MetadataStore
来存储状态 .要只运行一次,您可以使用FireOnceTrigger并将
max-messages-per-poll
设置为-1
,以便在单个轮询中获取所有文件 .您还可以考虑使用出站网关
get
仅使用您想要的那些文件 .