java - 具有 FileReadingMessageSource 的 IntegrationFlows 对同一输入文件触发作业两次

标签 java spring multithreading spring-integration spring-batch

我有一个 Spring Integration Batch 作业,当文件到达时会触发该作业:

@Bean
public IntegrationFlow fileTriggeredIntegrationFlow() {
    return IntegrationFlows.from(fileReadingMessageSource(),
            c -> c.poller(Pollers.fixedRate(filePollerFrequency, filePollerInitialDelay)))
            .transform(toJobLaunchRequest())
            .handle(jobLaunchingGateway)
            .handle("jobCompletionHandler", "afterJob")
            .get();
}

@Bean
public FileReadingMessageSource fileReadingMessageSource() {
    FileReadingMessageSource sourceReader = new FileReadingMessageSource();
    log.info("Listening for {} files at {}", sourceFilePattern, sourceFileDirectory);
    sourceReader.setDirectory(new File(sourceFileDirectory));
    sourceReader.setFilter(new RegexPatternFileListFilter(sourceFilePattern));
    return sourceReader;
}

长期以来一直非常顺利,但最近我遇到了问题,即作业针对同一输入文件运行了两次。以下是日志文件的片段:

2018-12-06 13:52:32,595 INFO [task-scheduler-7] o.s.i.f.FileReadingMessageSource:380 - Created message: [GenericMessage [payload=/local/MY_INPUT_FILE.DAT, headers={id=ba1ad258-72cf-ed07-1175-3d1cc36f9bc1, timestamp=1544122352595}]]

2018-12-06 13:52:32,599 INFO [task-scheduler-10] o.s.i.f.FileReadingMessageSource:380 - Created message: [GenericMessage [payload=/local/MY_INPUT_FILE.DAT, headers={id=ab8e9fbc-72a1-43e0-2ca3-8b8dcb3d91e5, timestamp=1544122352599}]]

如果您看到有两个以粗体标记的线程,它们拾取了相同的文件并触发了相同的作业两次。有人可以指导我如何避免这些情况吗?

最佳答案

看起来在下一个轮询周期中从 sourceFileDirectory 目录中选取了相同的文件。

您需要考虑将 AcceptOnceFileListFilterRegexPatternFileListFilter 一起使用作为 CompositeFileListFilterChainFileListFilter 中的组合>:https://docs.spring.io/spring-integration/docs/current/reference/html/files.html#file-reading

关于java - 具有 FileReadingMessageSource 的 IntegrationFlows 对同一输入文件触发作业两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53671336/

相关文章:

java - JTable 中的换行、右对齐、自动调整行高

java - com.fasterxml.jackson.databind.exc.MismatchedInputException :

java - Hibernate 正向工程

windows - 为什么我的进程只消耗处理器功率的 5%?

objective-c - Objective-c中多线程下载单个文件

java - JMenuItems 没有响应

具有极值实时值的 Java GC 日志

java - JdbcTemplate — 记录数据源连接 url

java - 如何使用 MongoTemplate 将单个字段插入到 JSON 中?

python - 等待用户输入或按定义的时间间隔运行的程序?