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

时间:2016-02-13 06:44:59

标签: java spring-boot spring-integration spring-batch

感谢您的关注 我在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>

提前致谢

2 个答案:

答案 0 :(得分:1)

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

但是,处理后删除/重命名文件通常会更好;否则性能会随着时间的推移而降低,因为本地目录中必须扫描的文件数量会增加。

由于您要删除远程文件,因此您不需要它,但是(为了完整性)还有一个FtpPersistentAcceptOnceFileListFilter(在filter中)以防止重新获取文件重启(delete-remote-files为假时需要)。

答案 1 :(得分:1)

感谢@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"/>