【问题标题】:Correct scope for multi threaded batch jobs in spring春季多线程批处理作业的正确范围
【发布时间】:2020-07-23 08:52:25
【问题描述】:

我相信我在这里遇到了范围界定问题。

项目说明:

目标是处理任何传入的文件(在磁盘上),包括元数据(存储在 SQL 数据库中)。为此,我有两个小任务(FileReservation 和 FileProcessorTask),它们是总体“工人”作业中的步骤。他们等待一个事件开始他们的工作。有几个线程处理并发作业。 FileReservation tasklet 使用作业上下文将 fileId 发送到 FileProcessorTask

一个单独的作业(无限期运行)检查数据库中的新文件元数据记录,并在发现新记录时使用已发布的事件“唤醒” FileReservationTask 小任务。

使用当前配置,当 FileReservation 小任务被唤醒时,作业的第二步可能会收到空消息。

如果您取消注释 BatchConfiguration 中的代码,您会发现当我们有单独的 bean 实例时它可以工作。

非常感谢任何指针。

谢谢!

【问题讨论】:

    标签: spring spring-batch spring-batch-tasklet


    【解决方案1】:

    为新文件轮询文件夹不适合批处理作业。因此,IMO 使用 Spring Batch 作业 (filePollingJob) 不是一个好主意。

    非常感谢任何指针。

    为新文件轮询文件夹并为每个传入文件运行作业是一种常见用例,可以使用 Spring 集成中的 java.nio.file.WatchServiceFileInboundChannelAdapter 来实现。详情请见How do I kickoff a batch job when input file arrives?

    【讨论】:

    • 作为 spring 集成的替代方案您可以使用“Apache Camel”文件端点来选择一个文件,然后使用 spring-batch 来处理它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 2021-12-17
    相关资源
    最近更新 更多