入站 sftp 通道适配器自定义过滤器不再接受相同文件
inbound sftp channel adapter custom filter not accepting same file again
我有一个非常简单的入站 sftp 通道适配器自定义过滤器,我只检查文件扩展名是否在接受列表中。如果是这样,它 returns 正确并且应该允许处理该文件。
发生的事情是第一次处理文件时它工作正常。如果相同的文件被丢弃在我的 sftp 服务器中,它会进行过滤并且返回 true,这意味着文件仍然被接受,它不会将该消息放在下游队列中。这是我的示例配置,看起来像
<int-sftp:inbound-channel-adapter id="sftpAdapter"
channel="ftpChannel"
session-factory="sftpSessionFactory"
local-directory="c:\temp"
remote-directory="//test//inbound"
remote-file-separator="/"
auto-create-local-directory="true"
delete-remote-files="true"
filter="customfilter"
preserve-timestamp="true"
>
<int:poller cron="0/5 * * * * *" max-messages-per-poll="1"/>
</int-sftp:inbound-channel-adapter>
那是因为AbstractInboundFileSynchronizingMessageSource
里面多了一个FileListFilter
:
private volatile FileListFilter<File> localFileListFilter = new AcceptOnceFileListFilter<File>();
既然你保证 duplicate
逻辑与你的 filter="customfilter"
你应该配置 local-filter
:
<int-sftp:inbound-channel-adapter id="sftpAdapter"
channel="ftpChannel"
....
local-filter="acceptAllFileFilter"/>
<bean id="acceptAllFileFilter" class="org.springframework.integration.file.filters.AcceptAllFileListFilter"/>
我有一个非常简单的入站 sftp 通道适配器自定义过滤器,我只检查文件扩展名是否在接受列表中。如果是这样,它 returns 正确并且应该允许处理该文件。
发生的事情是第一次处理文件时它工作正常。如果相同的文件被丢弃在我的 sftp 服务器中,它会进行过滤并且返回 true,这意味着文件仍然被接受,它不会将该消息放在下游队列中。这是我的示例配置,看起来像
<int-sftp:inbound-channel-adapter id="sftpAdapter"
channel="ftpChannel"
session-factory="sftpSessionFactory"
local-directory="c:\temp"
remote-directory="//test//inbound"
remote-file-separator="/"
auto-create-local-directory="true"
delete-remote-files="true"
filter="customfilter"
preserve-timestamp="true"
>
<int:poller cron="0/5 * * * * *" max-messages-per-poll="1"/>
</int-sftp:inbound-channel-adapter>
那是因为AbstractInboundFileSynchronizingMessageSource
里面多了一个FileListFilter
:
private volatile FileListFilter<File> localFileListFilter = new AcceptOnceFileListFilter<File>();
既然你保证 duplicate
逻辑与你的 filter="customfilter"
你应该配置 local-filter
:
<int-sftp:inbound-channel-adapter id="sftpAdapter"
channel="ftpChannel"
....
local-filter="acceptAllFileFilter"/>
<bean id="acceptAllFileFilter" class="org.springframework.integration.file.filters.AcceptAllFileListFilter"/>