使用Spring集成ftp入站适配器将已处理的文件移动到另一个目录

时间:2015-05-10 12:51:12

标签: spring ftp spring-integration

我正在尝试使用ftp入站适配器轮询本地目录以获取文件以供进一步处理。我想将文件移动到另一个本地目录并从原始目录中删除它。没有办法实现它。这就是我到目前为止所拥有的:

<int-ftp:inbound-channel-adapter id="ftpInbound"
    channel="ftpChannel" session-factory="ftpClientFactory"
    filename-pattern="*.xml" auto-create-local-directory="false"
    delete-remote-files="false" remote-directory="/" local-directory="//C://FBS//testmq">
    <int:poller fixed-rate="20000" />
</int-ftp:inbound-channel-adapter>

<int:channel id="ftpChannel">
    <int:queue />
</int:channel>

1 个答案:

答案 0 :(得分:3)

与伪事务管理器使用事务同步;见file example in the documentation。以下是文档该部分的配置:

<int-file:inbound-channel-adapter id="inputDirPoller"
    channel="someChannel"
    directory="/foo/bar"
    filter="filter"
    comparator="testComparator">
    <int:poller fixed-rate="5000">
        <int:transactional transaction-manager="transactionManager" synchronization-factory="syncFactory" />
    </int:poller>
</int-file:inbound-channel-adapter>

<int:transaction-synchronization-factory id="syncFactory">
    <int:after-commit expression="payload.renameTo(new java.io.File('/success/' + payload.name))" 
           channel="committedChannel" />
    <int:after-rollback expression="payload.renameTo(new java.io.File('/failed/' + payload.name))"
           channel="rolledBackChannel" />
</int:transaction-synchronization-factory>

继续阅读下一节......

  

参考上面的部分,您可能会认为取得这些成功&#39;或者&#39;失败&#39;流程完成时的操作,即使没有“真实”流程也是如此。轮询器下游的事务资源(如JDBC)。例如,考虑一个后跟ftp:outbout-channel-adapter /。这些组件都不是事务性的,但我们可能希望根据ftp传输的成功或失败将输入文件移动到不同的目录。

     

为了提供此功能,框架提供了一个PseudoTransactionManager,即使没有涉及真正的事务资源,也可以启用上述配置。如果流程正常完成,将调用beforeCommit和afterCommit同步,如果失败,将调用afterRollback。当然,因为它不是真正的事务,所以不会有实际的提交或回滚。伪事务只是用于启用同步功能的工具。