如何解决使用 SftpInboundAdapter 和 RemoteDirectoryExpression 轮询不同的远程目录
我有一个应用程序,它使用 spring 集成从 SFTP 轮询文件并处理它们。 sftp 的结构将始终相似,但将创建新文件夹。示例:
/sales/client1/in
/sales/client2/in
...
/sales/clientN/in
我正在使用 Sftp 入站适配器轮询 SFTP 服务器并启动流程,例如:
@Bean
public IntegrationFlow flow() {
return IntegrationFlows.from(
Sftp.inboundAdapter(sftpSessionFactory())
.preserveTimestamp(true)
.localDirectory(new File("sftp-inbound"))
.deleteRemoteFiles(true)
.autocreateLocalDirectory(true)
.remoteDirectoryExpression(
EXPRESSION_PARSER.parseExpression("@directoryProvider.getDirectory()"))
.filter(getFilter()),e -> e.id("sftpInboundAdapter")
.autoStartup(true)
.poller(Pollers.fixedDelay(5,TimeUnit.SECONDS)))
.log()
.channel("processing")
.get();
}
bean directoryProvider
将从数据库中获取文件夹,并以循环方式返回每个文件夹,根据我从文档中的理解:
从4.2版本开始,你可以指定remote-directory-expression代替remote-directory,让你动态确定每个poll上的目录 — 例如remote-directory-expression="@myBean.determineRemoteDir()"
这是我需要的,但是,方法 getDirectory
在创建 IntegrationFlow 时只执行两次,而不是在每次轮询中获取一个新文件夹,而是使用检索到的第二个文件夹,而不是再问一次。
我是否理解错误的文档?有没有一种简单的方法可以做到这一点,比如中间文件夹结构的通配符? sales/*/in
?谢谢!
解决方法
见Inbound Channel Adapters: Polling Multiple Servers and Directories。
使用带有自定义 RotatingServerAdvice
的 RotationPolicy
。
或者改用出站网关,使用递归 MGET 命令。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。