Spring批处理了解块处理

时间:2018-11-26 22:34:32

标签: spring-batch

我表中总共有8条记录,当春季批处理调用被读取时,其中6条符合jpareader的条件。现在,我将页面大小和块大小设置为1进行测试。期望作业运行时,它应该进行6次读取调用,然后应该对它们进行一个接一个的处理并一个接一个地写入。但是实际上发生的事情是它只调用了4次读取(从日志中我可以看到读取0 ... 1这样的页面)并处理4,由于不符合写入条件而将其中一个过滤掉,然后仅更新3条记录并作业被标记为成功完成。

像此作业一样,需要运行3次才能处理所有记录。我们不清楚。试图了解块处理,但我认为块只是为了汇总结果以进行写调用。在那之后,我希望读取和处理应继续进行。

在此测试中,我们对于为生产设置的块大小设置了什么感到困惑,如果设置为较大的数字,则将需要更多的内存(堆)。

1 个答案:

答案 0 :(得分:1)

我看到了困惑。 pageSize的{​​{1}}参数与面向块的步骤的JpaPagingItemReader(或chunkSize)无关。

如果您将commit-interval用于页面大小= 4的面向块的步骤之外,则它将一次获取4个项目(即,每页)。现在,可以将这4个项目分成2个块进行处理,并且每页将有两个块。 JpaPagingItemReader将读取第一页(4个项目的列表),然后在每次面向块的步骤对JpaPagingItemReader的调用时从该列表返回项目。这是一个带有readpageSize = 4chunkSize = 2和块侦听器的示例:

totalItems = 8

我使用此配置创建了一个sample app,以便您可以使用它并查看其工作原理。

希望这有助于了解与分页项读取器一起使用时面向块的处理模型。