了解 BATCH_STEP_EXECUTION 中的 COMMIT_COUNT

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

运行 Spring Batch 作业时,我在 BATCH_STEP_EXECUTION 表中看到我不理解的 COMMIT_COUNT 数据。

这项工作相当简单。只需一个步骤,即可使用 JdbcPagingItemReader(页面大小为 1000)和自定义编写器,在一些小的处理后更新 Oracle 数据库。它使用 ThreadPoolTaskExecutor,将事物分成 50 个块。它通常处理 10 到 20,000 条记录。

在最近的一次运行中,出现了数据库问题,因此大约有 15000 次读取和 14000 次写入。然而,我本以为该作业会在最终更新后完成,但它继续运行了整整 15 分钟,同时更新了 COMMIT_COUNT 列。

我原本预计会有大约 280 次提交 (14000 / 50),但实际提交数量超过 10000 次。仅在此时间之后,该步骤(和作业)才会设置为 FAILED,并带有适当的 EXIT_MESSAGE。

看来 BATCH_STEP_EXECUTION_CONTEXT 正在一遍又一遍地更新?

我可以根据需要提供更多详细信息/代码,但不想用无关的细节来混淆问题。

spring-batch
1个回答
0
投票

如果我没记错的话,如果为面向块的步骤配置了跳过并且编写器抛出异常,那么它将进入失败块的“单项”写入模式,因为没有办法知道哪些项在该块中导致该异常,因此找出失败的项目并在必要时跳过它的唯一方法是尝试将项目逐一写入该块中。欲了解详情,您可以参考这篇post以获得更多见解。

如果是这种情况,大的提交计数值可能是由于这种行为造成的。

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