我已成功设置Spring与SFTP集成,并轮询SFTP服务器并下拉文件。
我想知道的是,一旦下载完成后,是否可以对每个文件触发任务?我不想走文件系统手表的道路 - Spring SFTP中是否有内置的东西?
查看了文档,看起来可以通过频道来实现。
这是我的接收器频道目前的样子:
<int:channel id="receiveChannel">
<int:queue />
</int:channel>
我不确定我需要做什么来解雇客户拦截器或类似物。
编辑:从Spring文档中可以看出:
了解SFTP入站通道适配器是轮询使用者也很重要,因此您必须配置轮询器(全局默认值或本地子元素)。将文件传输到本地目录后,将生成一个带有java.io.File作为其有效负载类型的消息,并将其发送到通道属性标识的通道。
我不确定如何实现这一点 - 并且无法找到任何示例。
答案 0 :(得分:1)
看起来你必须从Enterprise Integration Patterns的开头开始,并确定channel
是整合中最重要的头等公民。
所以,你有一个<int-sftp:inbound-channel-adapter>
,负责从远程目录中轮询实体,将它们转到java.io.File
(就像你在RTFM中注意到的那样)并发送作为已配置频道的payload
Message
。该频道的订阅者将接收该消息并在File
payload
下执行一些所需的过程。
有关详细信息,另请参阅Spring Integration Samples。
答案 1 :(得分:0)
为了使遇到此问题的其他人受益,问题是只有在所有文件传输完毕后,才会将邮件置于收到的频道上。它们不是一次处理一次(正如我预期的那样)。在我的情况下,我在远程SFTP服务器上有数千个大文件,并且只有在下载了所有这些文件后才将消息发送到接收器通道。
我不确定这是否符合设计要求。