spring integration sftp:inbound-channel-adapter delete-remote-files = false

时间:2015-05-22 14:25:12

标签: java spring spring-integration

我们正在使用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"/>

2 个答案:

答案 0 :(得分:1)

请注意AcceptOnceFileListFilter(实际上是默认值)只会阻止当前执行的重复;它将状态保持在记忆中。

为避免重复执行,您应该使用配置了适当元数据存储的FileSystemPersistentAcceptOnceFileListFilter

请注意,PropertiesPersistingMetadataStore仅在正常的应用程序上下文关闭(关闭)时将其状态保持为磁盘,因此最强大的解决方案是Redis或MongoDB(或您自己的ConcurrentMetadataStore实现)。

您也可以不时(或在流程中)在flush()上致电PropertiesPersistingMetadataStore

答案 1 :(得分:0)

我更改了过滤器:它现在只检索一次。

<bean id="localFileFilter" class="org.springframework.integration.file.filters.AcceptOnceFileListFilter"/>