我们正在使用 spring 集成 sftp:inbound-channel-adapter 从远程主机传输数据。我们希望将文件保留在远程主机上。因此我们尝试了 删除远程文件 = 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"/>
最佳答案
请注意 AcceptOnceFileListFilter
(实际上是默认设置),只会防止当前执行的重复;它将其状态保存在内存中。
为了避免执行过程中出现重复,您应该使用 FileSystemPersistentAcceptOnceFileListFilter配置了适当的元数据存储。
请注意 PropertiesPersistingMetadataStore
仅在正常的应用程序上下文关闭(关闭)时将其状态保留到磁盘,因此最强大的解决方案是 Redis 或 MongoDB(或您自己的 ConcurrentMetadataStore
实现)。
您也可以调用flush()
关于PropertiesPersistingMetadataStore
不时(或在流程中)。
关于java - Spring 集成 sftp :inbound-channel-adapter delete-remote-files=false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30399272/