入站 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"/>