spring 中多线程批处理作业的正确范围

Correct scope for multi threaded batch jobs in spring

我认为我遇到了范围界定问题。

项目说明:

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

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

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

如果您取消注释 BatchConfiguration 中的代码,您会发现它在我们有单独的 bean 实例时有效。

非常感谢任何指点。

谢谢!

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

Any pointers are greatly appreciated.

轮询文件夹中的新文件和 运行 为每个传入文件轮询作业是一个常见用例,可以使用 java.nio.file.WatchServiceFileInboundChannelAdapter [=] 19=]整合。有关详细信息,请参阅 How do I kickoff a batch job when input file arrives?