我们正在使用spring integration sftp:inbound-channel-adapter从远程主机传输数据。我们希望将文件保存在远程主机上。因此,我们尝试了 delete-remote-files = false选项。
<int-sftp:inbound-channel-adapter
id="sftpInboundChannelAdapter"
channel="filesToParse"
session-factory="..."
remote-directory="..."
filename-pattern="..."
local-directory="..."
temporary-file-suffix=".tmp"
delete-remote-files="false"
auto-create-local-directory="true" local-filter="localFileFilter"
>
不幸的是,这些文件会被多次处理。有没有办法保留远程文件而不是多次处理它们?
编辑:这是因为后续进程会删除本地文件。
<bean id="localFileFilter" class="org.springframework.integration.file.filters.AcceptAllFileListFilter"/>
答案 0 :(得分:1)
请注意AcceptOnceFileListFilter
(实际上是默认值)只会阻止当前执行的重复;它将状态保持在记忆中。
为避免重复执行,您应该使用配置了适当元数据存储的FileSystemPersistentAcceptOnceFileListFilter。
请注意,PropertiesPersistingMetadataStore
仅在正常的应用程序上下文关闭(关闭)时将其状态保持为磁盘,因此最强大的解决方案是Redis或MongoDB(或您自己的ConcurrentMetadataStore
实现)。
您也可以不时(或在流程中)在flush()
上致电PropertiesPersistingMetadataStore
。
答案 1 :(得分:0)
我更改了过滤器:它现在只检索一次。
<bean id="localFileFilter" class="org.springframework.integration.file.filters.AcceptOnceFileListFilter"/>