使用 SftpInboundAdapter 和 RemoteDirectoryExpression 轮询不同的远程目录
Poll different remote directories using SftpInboundAdapter and 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
将从数据库中获取文件夹并将循环返回每个文件夹,根据我从文档中了解到的内容:
Starting with version 4.2, you can specify remote-directory-expression instead of remote-directory, letting you dynamically determine the directory on each poll — for example, remote-directory-expression="@myBean.determineRemoteDir()"
这正是我所需要的,但是,方法 getDirectory
仅在创建 IntegrationFlow 时执行两次,而不是在每次轮询时获取一个新文件夹,它使用检索到的第二个文件夹并不再询问
我是不是理解错了文档?有没有一种简单的方法可以做到这一点,比如中间文件夹结构的通配符? sales/*/in
?谢谢!
参见Inbound Channel Adapters: Polling Multiple Servers and Directories。
使用带有自定义 RotationPolicy
的 RotatingServerAdvice
。
或者使用出站网关,使用递归 MGET 命令。
我有一个应用程序使用 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
将从数据库中获取文件夹并将循环返回每个文件夹,根据我从文档中了解到的内容:
Starting with version 4.2, you can specify remote-directory-expression instead of remote-directory, letting you dynamically determine the directory on each poll — for example, remote-directory-expression="@myBean.determineRemoteDir()"
这正是我所需要的,但是,方法 getDirectory
仅在创建 IntegrationFlow 时执行两次,而不是在每次轮询时获取一个新文件夹,它使用检索到的第二个文件夹并不再询问
我是不是理解错了文档?有没有一种简单的方法可以做到这一点,比如中间文件夹结构的通配符? sales/*/in
?谢谢!
参见Inbound Channel Adapters: Polling Multiple Servers and Directories。
使用带有自定义 RotationPolicy
的 RotatingServerAdvice
。
或者使用出站网关,使用递归 MGET 命令。