rollback - Spring 批处理 : Commit-Interval not honored after roll back during write

标签 rollback spring-batch

假设我的提交间隔是 1000。

在写入过程中,我在第 990 条记录处收到错误,根据跳过策略可以跳过该错误。

因此将会发生回滚,写入器将重新开始从记录 1 写入相同的记录。

但是,这一次,它正在提交每条记录。它不尊重提交间隔。这使得工作变得非常缓慢。

为什么会有这样的行为?我的配置中缺少什么吗?

谢谢。

最佳答案

该行为对于 Spring Batch 来说是强制性的,以隔离坏项目,基本上它会回滚 block 并使用 commit-rate=1 处理/写入每个项目以找到坏项目(在处理器或编写器中)

参见spring batch forum comment to similar problem

相关部分

--> 5 items read, processing starts
<processor called:15>
<processor called:16>
<processor called:17> will throw an error on write
<processor called:18>
<processor called:19>
<before write:[15, 16, 17, 18, 19]>
<on write error>
--> error on item 17, but it was in the list, lets find it
--> rollback
<before chunk>
--> spring batch goes through all items of the chunk again to find the bad item
--> basically it runs now with commit-rate="1" (only for this chunk)
<processor called:15>
<after write:[15]>
<after chunk>
<before chunk>
<processor called:16>
<after write:[16]>
<after chunk>
<before chunk>
<processor called:17> called again for the bad item, because it's still unknown to spring batch, that this is the bad one
--> no write, because itemWriter.write() was called with the bad item only and did throw an exception (again)
--> but now spring batch knows the bad item
<before chunk>

关于rollback - Spring 批处理 : Commit-Interval not honored after roll back during write,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7025506/

相关文章:

java - HikariCP 自动提交用法与常规 java 连接自动提交用法相同吗?

c# - C# 中的提交和回滚

spring - 如何在 Spring Batch 中分别读取平面文件头和正文

java - Spring 批处理 : Propagate exception encountered in partitioned step (Stop job execution)

java - Spring Batch 状态更改查询

ruby-on-rails - rake 数据库 :migrate - how do I undo all migrations and redo them

sql-server - 并发环境下回滚是什么意思?

java - 使用 HikariCP 不会回滚事务

Spring批量停止工作

java - 如何从 Spring 批处理作业中终止步骤