java - 如何计算 batch_step_execution 元数据表中的 Spring Batch 提交计数
问题描述
我试图对我的 Spring Batch 应用程序进行一些验证,该应用程序由 1 个作业和 1 个具有读取器/处理器/写入器的步骤 (TaskletStep) 组成。
现在,我注意到在验证数据库中执行元数据表的读/写计数时,每次提交计数似乎都不正确,或者说我缺乏理解。例如,我读取了一个简单的 CSV 文件,其中包含 10 行。我将块大小设置为 3。现在,根据下图,据我了解,框架将通过 CSV 中的ITEM READER读取每一行并将其传递给ITEM Processor,然后继续读取下一个项目直到满足块大小。因此,按照我的虚拟示例,顺序应如下所示:
读取 item1,传递给处理器(尚未满足块大小,1/3)
读取 item2,然后传递给处理器(尚未满足块大小,2/3)
读取 item3,然后传递给处理器(尚未满足块大小,3/3)
满足 3 的块大小要求,因此整个块被传递给 Writer,然后应计为1 个 COMMIT(包装在一个事务中)。
我在本地有这个确切的设置,出于某种原因,我一直commit_count
在数据库的 batch_step_execution 元数据表中得到一个5。现在,这对我来说没有意义,因为 10 只能被 3 整除 3 次,因此余数或 item10 (最后一项)将是总提交计数为4的最后提交的事务。
我在这里错过了什么吗?我想确保我彻底理解这个框架,谢谢。
解决方案
将有一个额外的提交来写入最终步骤/作业状态。
所以 4 个用于块,另外一个用于最终状态更改。
推荐阅读
- angular - Npm 安装构建失败
- c# - 聚合包含表达式上的实体框架“代码应该无法访问”
- html - 如何在不同屏幕分辨率下的相同位置显示 CSS 属性“位置:固定”?
- php - (也许)停止启动 foreach 循环以修复 Bootstrap 结构
- javascript - meteo.js:21 Uncaught SyntaxError: await 仅在异步函数中有效
- css - Angular 添加主题 scss 以覆盖全局样式
- swift - 运行仅 iPhone 应用程序的 iPad 对应于哪款 iPhone?
- php - 多个 MySQL 查询需要大量时间来加载页面
- nunit - Namespce OneTimeTearDownAttirbute () 和 OneTimeSetUpttirbute () 在 NUnit.Framework 中不存在,在自动生成的 specflow(.cs) 文件中显示错误
- apache-spark - java.util.NoSuchElementException:在表 abc.company_vals 中找不到列:companyId,companyName