如何在 Spring Batch 5.x 中对记录进行分组,以便每个线程/执行专用于一组记录

问题描述 投票:0回答:2

我正在使用 Spring Batch 5 & 我有一个用例,我需要根据

bookingId
对输入记录(来自数据库)进行分组。现在处理器应该从读取器输出中逐组挑选记录。另外,作者应该逐组编写输出。

我们如何通过

RepositoryItemReader
实现这一目标。我正在努力寻找 Spring Batch 5 的示例代码。

java spring spring-boot spring-batch
2个回答
0
投票

面向块的处理模型适合这种用例。无论您如何对查询中的项目进行分组(例如 sql

group by
),从读取器返回时,来自同一组的项目都可能跨越多个块。因此,每个组不可能有一个块。

当然,从技术上讲,滥用该模式并找到一种方法来实现该要求是可能的,但每个解决方案都不会是干净的,因为它会使用不是为用例设计的模型。

我认为解决此问题的“最干净”方法是使用分区步骤,其中分区是根据分组标准创建的(在您的情况下是

bookingId
)。


0
投票

@Pino 的解决方案必须进行一些修改,使用 SingleItemPeekableItemReader 来查看原始块之外的下一条记录,以处理 @Mahmoud Ben Hassine 提出的有关分块的问题,但这不是“最干净”的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.