java - Spring 集成 sftp :inbound-channel-adapter delete-remote-files=false

标签 java spring spring-integration

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

相关文章:

java - ClassNotFoundException,即使包含的 JAR 是构建的一部分

java.lang.NoSuchMethodException : userAuth. User.<init>()

java - Hibernate LAZY Fetch VS 乐观锁版本

spring - 将 Spring Batch 和 Spring Integration 结合起来?

javac中java自类型递归类型参数和继承错误

Java多线程,主线程为什么停止了?

java - 无法解析 java 构建/Spring

java - 在Java中加载资源中不同文件夹下的属性

java - 如何在 Spring Integration 中将 String 属性注入(inject)到 javax.jms.TextMessage

javascript - CORS 不适用于 jQuery 和 Java