微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 SftpInboundAdapter 和 RemoteDirectoryExpression 轮询不同的远程目录

如何解决使用 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

使用带有自定义 RotatingServerAdviceRotationPolicy

或者改用出站网关,使用递归 MGET 命令。

https://docs.spring.io/spring-integration/docs/current/reference/html/sftp.html#sftp-outbound-gateway

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?