春季多线程批处理作业的正确范围

时间:2020-04-10 15:05:09

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

我相信我这里有一个范围界定问题。

可在此处找到
spring-batch项目代码:https://github.com/ben467834/spring-batch-project-01

项目说明:

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

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

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

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

非常感谢任何指针。

谢谢!

1 个答案:

答案 0 :(得分:0)

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

非常感谢任何指针。

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