首页 > 解决方案 > 如何计算 batch_step_execution 元数据表中的 Spring Batch 提交计数

问题描述

我试图对我的 Spring Batch 应用程序进行一些验证,该应用程序由 1 个作业和 1 个具有读取器/处理器/写入器的步骤 (TaskletStep) 组成。

现在,我注意到在验证数据库中执行元数据表的读/写计数时,每次提交计数似乎都不正确,或者说我缺乏理解。例如,我读取了一个简单的 CSV 文件,其中包含 10 行。我将块大小设置为 3。现在,根据下图,据我了解,框架将通过 CSV 中的ITEM READER读取每一行并将其传递给ITEM Processor,然后继续读取下一个项目直到满足块大小。因此,按照我的虚拟示例,顺序应如下所示:

  1. 读取 item1,传递给处理器(尚未满足块大小,1/3)

  2. 读取 item2,然后传递给处理器(尚未满足块大小,2/3)

  3. 读取 item3,然后传递给处理器(尚未满足块大小,3/3)

  4. 满足 3 的块大小要求,因此整个块被传递给 Writer,然后应计为1 个 COMMIT(包装在一个事务中)。

在此处输入图像描述

我在本地有这个确切的设置,出于某种原因,我一直commit_count在数据库的 batch_step_execution 元数据表中得到一个5。现在,这对我来说没有意义,因为 10 只能被 3 整除 3 次,因此余数或 item10 (最后一项)将是总提交计数为4的最后提交的事务。

我在这里错过了什么吗?我想确保我彻底理解这个框架,谢谢。

标签: javaspringspring-batch

解决方案


将有一个额外的提交来写入最终步骤/作业状态。

所以 4 个用于块,另外一个用于最终状态更改。


推荐阅读