我在我的sftp出站网关上添加了SFTPersistentAcceptonFileListFilter,以筛选出我已处理的文件。
<int-sftp:outbound-gateway id="gateway"
expression="payload"
request-channel="request"
remote-directory="main"
command-options="-R"
command="ls"
session-factory="sessionFactory"
filter="sftpPersistentAcceptOnceFileListFilter"
reply-channel="reply">
</int-sftp:outbound-gateway>
<bean name="metadataStore" class="org.springframework.integration.metadata.PropertiesPersistingMetadataStore">
<property name="baseDirectory" value="/temp"/>
</bean>
<bean id="sftpPersistentAcceptOnceFileListFilter" class="org.springframework.integration.sftp.filters.SftpPersistentAcceptOnceFileListFilter">
<constructor-arg name="store" ref="metadataStore"/>
<constructor-arg name="prefix" value="files/"/>
</bean>
例如,我有以下目录:
main
--directoryA
--file1.txt
--file2.txt
--file3.txt
在第一次投票中,一切似乎都很顺利。检查元数据存储,文件1、文件2、文件3存储在那里。下一次轮询时,payload返回空,因为所有文件都已在存储中,并且它们都按预期由过滤器过滤掉。但是,当我尝试加载另一个文件时,它以某种方式被过滤掉,并且没有保存在元数据存储中。上传新版本的file1.txt时也会发生同样的情况。我希望它会通过过滤器,因为修改日期的变化,但不知为什么它没有。我错过一些配置了吗?
main
--directoryA
--file1.txt
--file2.txt
--file3.txt
**--file4.txt**
1条答案
按热度按时间ghhaqwfi1#
我刚测试了一下,效果很好。
我在第二次投票后加了一个新的:
但是,我注意到,我们只存储文件名,而不存储子目录,因此如果在多个位置有相同的文件名,它将无法按预期工作。
我为此提出了一个问题。
顺便说一句,您应该使用一个更健壮的元数据存储来进行生产(或者至少
filter.setFlushOnUpdate(true);
在过滤器上;否则,在应用程序完全关闭之前,它们不会被持久化)。编辑
哦,但我发现这个没人接。。。
调查。
编辑2
问题是我们正在过滤子目录;当我加上
newOne
成功是因为directoryA
的时间戳已更改。当我加上andAnother
,子目录时间戳已更改,但directoryA
他没有。以下是解决方法: