Spring integration Spring集成-FileSystemTempersistentAcceptonCefileListFilter筛选同名但时间戳不同的文件

Spring integration Spring集成-FileSystemTempersistentAcceptonCefileListFilter筛选同名但时间戳不同的文件,spring-integration,Spring Integration,我有一个Spring集成应用程序,一旦文件存在于本地目录中,它就会对文件进行一些处理。处理完文件后,它会将文件移动到已处理的目录中 一段时间后,一个新文件出现在同一个本地目录中,文件名相同,但内容和时间戳不同。应用程序应再次处理该文件,然后将其移动到已处理的目录。。。但信息永远不会生成。以下是配置: @Bean @InboundChannelAdapter(value = "dailyFileInputChannel", poller = @Poller(maxMessagesPerPoll =

我有一个Spring集成应用程序,一旦文件存在于本地目录中,它就会对文件进行一些处理。处理完文件后,它会将文件移动到已处理的目录中

一段时间后,一个新文件出现在同一个本地目录中,文件名相同,但内容和时间戳不同。应用程序应再次处理该文件,然后将其移动到已处理的目录。。。但信息永远不会生成。以下是配置:

@Bean
@InboundChannelAdapter(value = "dailyFileInputChannel", poller = @Poller(maxMessagesPerPoll = "1", fixedDelay = "${load.manualPollingInterval}"))
public MessageSource<File> messageSource(ApplicationProperties applicationProperties) {
     FileReadingMessageSource source = new FileReadingMessageSource();
     source.setDirectory(applicationProperties.getLoadDirectory());
     CompositeFileListFilter<File> compositeFileListFilter = new CompositeFileListFilter<File>();
     compositeFileListFilter.addFilter(new LastModifiedFileListFilter());
     FileSystemPersistentAcceptOnceFileListFilter persistent = new FileSystemPersistentAcceptOnceFileListFilter(store(), "dailyfilesystem");
     persistent.setFlushOnUpdate(true);
     compositeFileListFilter.addFilter(persistent);
     compositeFileListFilter.addFilter(new SimplePatternFileListFilter(applicationProperties.getFileNamePattern()));
     source.setFilter(compositeFileListFilter);
     return source;
}

@Bean
public PropertiesPersistingMetadataStore store() {
    PropertiesPersistingMetadataStore store = new PropertiesPersistingMetadataStore();
    store.setBaseDirectory(applicationProperties.getProcessedStoreDirectory());
    store.setFileName(applicationProperties.getProcessedStoreFile());
    return store;
}

@Bean
@ServiceActivator(inputChannel = "dailyFileInputChannel")
public MessageHandler handler() {
    // return a handler that processes and moves the file
}
@Bean
@InboundChannelAdapter(value=“dailyFileInputChannel”,poller=@poller(maxMessagesPerPoll=“1”,fixedDelay=“${load.manualPollingInterval}”))
公共消息源消息源(ApplicationProperties ApplicationProperties){
FileReadingMessageSource=新建FileReadingMessageSource();
setDirectory(applicationProperties.getLoadDirectory());
CompositeFileListFilter CompositeFileListFilter=新的CompositeFileListFilter();
addFilter(新的LastModifiedFileListFilter());
FileSystemTempersistentAcceptonCefileListFilter persistent=新的FileSystemTempersistentAcceptonCefileListFilter(store(),“dailyfilesystem”);
persistent.setFlushUpdate(true);
compositeFileListFilter.addFilter(持久);
addFilter(新的SimplePatternFileListFilter(applicationProperties.getFileNamePattern());
source.setFilter(compositeFileListFilter);
返回源;
}
@豆子
公共属性PersistingMetadatastore存储(){
PropertiesPersistingMetadataStore=新PropertiesPersistingMetadataStore();
setBaseDirectory(applicationProperties.getProcessedStoreDirectory());
store.setFileName(applicationProperties.getProcessedStoreFile());
退货店;
}
@豆子
@ServiceActivator(inputChannel=“dailyFileInputChannel”)
public MessageHandler(){
//返回处理和移动文件的处理程序
}

我不希望应用程序处理具有相同名称和相同修改时间戳的文件。如何确保应用程序仍然处理具有相同名称但不同时间戳的文件?

使用
ChainFileListFilter
而不是
CompositeFileListFilter

后者将所有文件呈现给每个过滤器,因此,如果
LastModifiedFileListFilter
在第一次尝试时过滤一个文件(并且
fileSystemTempersistentAcceptOnceFileListFilter
通过),复合过滤器将过滤该文件;在下一次尝试时,它将再次被过滤,即使它通过了第一个过滤器

ChainFileListFilter
不会将由
LastModifiedFileListFilter
筛选的文件传递给下一个筛选器

这是最近的“修复”(见4.3.7)

目前的版本是4.3.8