Jam*_*mes 3 spring-integration
我有一个 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
}
Run Code Online (Sandbox Code Playgroud)
我不希望应用程序处理具有相同名称和相同修改时间戳的文件。如何确保应用程序仍然处理具有相同名称但不同时间戳的文件?
使用 aChainFileListFilter代替CompositeFileListFilter.
后者将所有文件呈现给每个过滤器,因此,如果LastModifiedFileListFilter第一次尝试过滤文件(并且FileSystemPersistentAcceptOnceFileListFilter通过),则复合过滤器会过滤该文件;下次尝试时,即使它通过了第一个过滤器,也会再次过滤。
不会ChainFileListFilter将经过 过滤的文件传递到LastModifiedFileListFilter下一个过滤器。
这是最近的“修复”(在 4.3.7 JIRA中)。
当前版本是4.3.8。
| 归档时间: |
|
| 查看次数: |
1729 次 |
| 最近记录: |