程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Spring SFTP入站chanel适配器删除本地文件大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Spring SFTP入站chanel适配器删除本地文件?

开发过程中遇到Spring SFTP入站chanel适配器删除本地文件的问题如何解决?下面主要结合日常开发的经验,给出你关于Spring SFTP入站chanel适配器删除本地文件的解决方法建议,希望对你解决Spring SFTP入站chanel适配器删除本地文件有所启发或帮助;

消息发送到流之后,入站适配器永远不会采取任何操作(自行执行)。它不了解有关下游流拓扑的任何信息-异步切换等。在删除文件之后和发送消息之前完成远程删除。

由于您已经在使用伪事务,并且在轮询程序线程上进行了所有操作,因此可以使用进行删除after-commit-Expression

另一种技术是将a添加request-handler-advice到最终使用者(在您的情况下为服务激活器)。这证明在该retry-and- more示例应用程序。

回应您在下面的评论;否,使用SpEL不可能做两件事-但是,您可以使用

<int:after-commit Expression="payload" chAnnel="postProcess"/>

并在postProcess通道下游进行所需的操作。

但是,对于我来说,尚不清楚为什么要从过滤器中删除文件以获取成功和失败的信息-您应该只使用一个AcceptAllfileListFilter

便说一句,我看不到您acceptOnceFilter在这里的任何地方使用过-您是否打算将其配置为local-filter属性?

解决方法

我已经配置了spring SFTP以将文件从远程路径集中到本地,以处理一些作业,然后同时删除本地和远程文件。

下面的配置工作正常,除了删除本地文件外,我没有找到任何配置来删除本地文件,例如 delete-remote-files="true"

<bean id="sftpSessionFactory"
    class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory"
    p:host="${sftp.host}"
    p:port="${sftp.port}"
    p:user="${sftp.usernamE}"
    p:password="${sftp.passworD}"
    p:allowUnknownKeys="${sftp.allowUnknownKeys}" />

<int:chAnnel id="sftpChAnnel">
    <int:queue />
</int:chAnnel>

<int-sftp:inbound-chAnnel-adapter
    id="sftpInboundAdapter"
    chAnnel="sftpChAnnel"
    session-factory="sftpSessionFactory"
    remote-directory="${sftp.remotedir}"
    local-directory="${sftp.localdir}"
    auto-create-local-directory="true"      
    delete-remote-files="true" 
    filename-pattern="*.TXT">
</int-sftp:inbound-chAnnel-adapter>

<int:poller default="true" fixed-rate="${quartz.pick.repeaTinterval}" max-messages-per-poll="${sftp.msg.per.poll}">
    <int:transactional synchronization-factory="syncFactory" />
</int:poller>

<int:transaction-synchronization-factory id="syncFactory">
    <int:after-rollBACk expression="@acceptOnceFilter.remove(payload)"/>
</int:transaction-synchronization-factory>

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

<int:service-activator input-chAnnel="sftpChAnnel" ref="msgHandler" method="handlemessage"/>

<bean id="transactionManager" class="org.springframework.integration.transaction.PseudotransactionManager"/>

<bean id="filenameGenerator" class="org.springframework.integration.file.DefaultFilenameGenerator" />

这里,当文件从远程传输到本地时,服务激活器被调用。

服务激活器完成作业后,如何配置删除本地文件?

编辑:通过以下更改解决了从远程和本地删除有效负载的问题:

<int:transaction-synchronization-factory id="syncFactory">
    <int:after-commit expression="payload.delete()" chAnnel="nullChAnnel"/>
    <int:after-rollBACk expression="@acceptOnceFilter.remove(payload)"/>
</int:transaction-synchronization-factory>

大佬总结

以上是大佬教程为你收集整理的Spring SFTP入站chanel适配器删除本地文件全部内容,希望文章能够帮你解决Spring SFTP入站chanel适配器删除本地文件所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。