我表中总共有8条记录,当春季批处理调用被读取时,其中6条符合jpareader的条件。现在,我将页面大小和块大小设置为1进行测试。期望作业运行时,它应该进行6次读取调用,然后应该对它们进行一个接一个的处理并一个接一个地写入。但是实际上发生的事情是它只调用了4次读取(从日志中我可以看到读取0 ... 1这样的页面)并处理4,由于不符合写入条件而将其中一个过滤掉,然后仅更新3条记录并作业被标记为成功完成。
像此作业一样,需要运行3次才能处理所有记录。我们不清楚。试图了解块处理,但我认为块只是为了汇总结果以进行写调用。在那之后,我希望读取和处理应继续进行。
在此测试中,我们对于为生产设置的块大小设置了什么感到困惑,如果设置为较大的数字,则将需要更多的内存(堆)。
答案 0 :(得分:1)
我看到了困惑。 pageSize
的{{1}}参数与面向块的步骤的JpaPagingItemReader
(或chunkSize
)无关。
如果您将commit-interval
用于页面大小= 4的面向块的步骤之外,则它将一次获取4个项目(即,每页)。现在,可以将这4个项目分成2个块进行处理,并且每页将有两个块。 JpaPagingItemReader
将读取第一页(4个项目的列表),然后在每次面向块的步骤对JpaPagingItemReader
的调用时从该列表返回项目。这是一个带有read
,pageSize = 4
,chunkSize = 2
和块侦听器的示例:
totalItems = 8
我使用此配置创建了一个sample app,以便您可以使用它并查看其工作原理。
希望这有助于了解与分页项读取器一起使用时面向块的处理模型。