如何防止处理 `int-ftp:inbound-channel-adapter 中的旧文件?

how to prevent process on old files in `int-ftp:inbound-channel-adapter `?

感谢关注
我在 spring 集成中使用了 int-ftp:inbound-channel-adapter,我想从 ftp 服务器检索文件并对其进行处理,并将备份保存在本地目录中,但是当应用程序处于启动状态时 int-ftp:inbound-channel-adapter从备份位置的本地旧文件创建消息,并尝试按以下方式发送到通道我的代码:

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

     <int-ftp:inbound-channel-adapter id="sam-inbound-channel-adapter"
                                         channel="sam-ready-to-process-inbound"
                                         session-factory="sam-ftp-Session"
                                         auto-create-local-directory="true"
                                         delete-remote-files="true"
                                         auto-startup="true"
                                         filename-pattern="*.bmp"
                                         remote-directory="/in/"
                                         remote-file-separator="/"
                                         local-filter="acceptOnceFilter"
                                         preserve-timestamp="true"
                                         local-filename-generator-expression="@fileName.name('sam',#this)"
                                         temporary-file-suffix=".writing"
                                         local-directory="./backup/sam/in//">
            <int:poller fixed-rate="10000"/>
        </int-ftp:inbound-channel-adapter>

提前致谢

see the documentation。您可以在 local-filter 中使用 FileSystemPersistentAcceptOnceFileListFilter 以及您选择的 MetadataStore,以防止文件在重新启动后被重新处理。

不过,一般情况下delete/rename处理后的文件会更好;否则随着本地目录中必须扫描的文件数量的增加,性能会随着时间的推移而降低。

因为你正在删除远程文件,你不需要它,但是(为了完整性)还有一个 FtpPersistentAcceptOnceFileListFilter (在 filter 中)以防止在删除后重新获取文件重新启动(当 delete-remote-files 为 false 时需要)。

感谢@Gary 帮助我设计我的项目,为了解决我使用 int-file:outbound-gateway 将文件移动到另一个目录的问题,如下所示:

<int:channel id="ready-to-process-inbound"/>
<int:channel id="ready-to-process-inbound-tmp-mover"/>

  <int-ftp:inbound-channel-adapter id="inbound-channel-adapter"
                                     channel="ready-to-process-inbound-tmp-mover"
                                     session-factory="ftp-Session"
                                     auto-create-local-directory="true"
                                     delete-remote-files="true"
                                     auto-startup="true"
                                     filename-pattern="*.bmp"
                                     remote-directory="/in/"
                                     remote-file-separator="/"
                                     preserve-timestamp="true"
                                     local-filename-generator-expression="@fileNameGenerator.by('prefix',#this)"
                                     temporary-file-suffix=".writing"
                                     local-directory="./backup//tmp//">
        <int:poller fixed-rate="10000"/>
    </int-ftp:inbound-channel-adapter>

 <int-file:outbound-gateway id="file-outbound-gateway-tmp-mover"
                               request-channel="ready-to-process-inbound-tmp-mover"
                               reply-channel="ready-to-process-inbound"
                               directory="./backup//in//"
                               mode="REPLACE" delete-source-files="true"/>