我正在尝试使用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>
答案 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。当然,因为它不是真正的事务,所以不会有实际的提交或回滚。伪事务只是用于启用同步功能的工具。