Spring batch_step_execution 元数据 table 中的批处理提交计数是如何计算的
How is Spring Batch commit count in batch_step_execution metadata table calculated
我试图对我的 Spring 批处理应用程序进行一些验证,该应用程序由 1 个作业和 1 个步骤 (TaskletStep) 组成,具有 reader/processor/writer.
现在,我注意到在从数据库中的执行元数据 table 验证 read/write 计数时,每次提交计数似乎都不正确,或者更确切地说,我缺乏理解。例如,我读取了一个简单的 CSV 文件,其中包含 10 行。我将块大小设置为 3。现在,根据下图和我的理解,框架将通过 CSV 中的 ITEM READER 读取每一行并将其传递给ITEM Processor,然后继续读取下一个项目,直到满足块大小。因此,根据我的虚拟示例,序列应如下所示:
item1 被读取,传递给处理器(尚未满足块大小,1/3)
item2 被读取,然后传递给处理器(尚未满足块大小,2/3)
item3 被读取,然后传递给处理器(块大小已满足,3/3)
满足Chunk size of 3的要求,所以整个Chunk是
传递给 Writer,然后应计为 1 COMMIT(包含在一个事务中)。
我在本地有这个确切的设置,出于某种原因,我在数据库的 batch_step_execution 元数据 table 中不断得到一个 commit_count
作为 5。现在,这对我来说没有意义,因为 10 只能被 3 整除 3 次,因此余数或 item10(最后一项)将是提交的最后一个事务,总提交次数为 4.
我是不是漏掉了什么?我想确保我彻底理解这个框架,谢谢。
将有一个额外的提交来写入最终的 step/job 状态。
所以 4 个用于块,另外一个用于最终状态更改。
我试图对我的 Spring 批处理应用程序进行一些验证,该应用程序由 1 个作业和 1 个步骤 (TaskletStep) 组成,具有 reader/processor/writer.
现在,我注意到在从数据库中的执行元数据 table 验证 read/write 计数时,每次提交计数似乎都不正确,或者更确切地说,我缺乏理解。例如,我读取了一个简单的 CSV 文件,其中包含 10 行。我将块大小设置为 3。现在,根据下图和我的理解,框架将通过 CSV 中的 ITEM READER 读取每一行并将其传递给ITEM Processor,然后继续读取下一个项目,直到满足块大小。因此,根据我的虚拟示例,序列应如下所示:
item1 被读取,传递给处理器(尚未满足块大小,1/3)
item2 被读取,然后传递给处理器(尚未满足块大小,2/3)
item3 被读取,然后传递给处理器(块大小已满足,3/3)
满足Chunk size of 3的要求,所以整个Chunk是 传递给 Writer,然后应计为 1 COMMIT(包含在一个事务中)。
我在本地有这个确切的设置,出于某种原因,我在数据库的 batch_step_execution 元数据 table 中不断得到一个 commit_count
作为 5。现在,这对我来说没有意义,因为 10 只能被 3 整除 3 次,因此余数或 item10(最后一项)将是提交的最后一个事务,总提交次数为 4.
我是不是漏掉了什么?我想确保我彻底理解这个框架,谢谢。
将有一个额外的提交来写入最终的 step/job 状态。
所以 4 个用于块,另外一个用于最终状态更改。