Java SFTP集成-SftpInboundFileSynchronizer-如何不再下载同一文件

Java SFTP集成-SftpInboundFileSynchronizer-如何不再下载同一文件,java,spring-integration,Java,Spring Integration,在我当前的应用程序中,使用spring批处理作业,我触发进程将远程文件SFTP到本地目录,对其进行处理并在后期处理中删除文件 @Bean(“ftpMessageSource”) @EndpointId(“streamInboundAdapter”) @InboundChannelAdapter(channel=“sftpChannel”,poller=@poller(fixedDelay=“5000”),autoStartup=“false”) public MessageSource sft

在我当前的应用程序中,使用spring批处理作业,我触发进程将远程文件SFTP到本地目录,对其进行处理并在后期处理中删除文件


@Bean(“ftpMessageSource”)
@EndpointId(“streamInboundAdapter”)
@InboundChannelAdapter(channel=“sftpChannel”,poller=@poller(fixedDelay=“5000”),autoStartup=“false”)
public MessageSource sftpMessageSource(){
SftpInboundFileSynchronizingMessageSource源=
新的SftpInboundFileSynchronizingMessageSource(sftpInboundFileSynchronizer());
setLocalDirectory(新文件(“sftp入站”);
source.setAutoCreateLocalDirectory(true);
setLocalFilter(新文件SystemTempersistentAcceptonCefileListFilter(metadataStore(),“”);
source.setMaxFetchSize(10);
返回源;
}
@Bean(name=“fileStore”)
公共属性PersistingMetadatastore metadataStore(){
PropertiesPersistingMetadataStore metadataStore=新PropertiesPersistingMetadataStore();
setBaseDirectory(“文件存储”);
setFileName(“filestore.properties”);
metadataStore.AfterPropertieSet();
返回元数据存储;
}
在处理每个文件时,我在fileStore.properties文件中输入filename


metadataStore.put(file.getName(),file.getName());
我遇到的一个问题是,下一次处理(不重新启动服务器并再次启动相同的进程)时,进程再次获取相同的文件集进行处理

我不想SFTP处理过的文件,请您指出我缺少的配置,以避免再次下载相同的文件

和删除文件后处理

所以,该文件不再存在于本地目录中。由于您不筛选远程文件,因此它们将作为新的本地副本再次下载

fileSystemTempersistentAcceptonCefileListFilter
逻辑基于
file.lastModified()
并且如果它与现有条目不同,则会将其替换,从而推送到下游

考虑在
sftpInboundFileSynchronizer
上使用
sftpersistentacceptonfilelistfilter
。这样就不会从SFTP中提取相同的文件(如果相同的
lastModified

请参阅文档中的更多内容: