Spring Batch:在写入期间回滚后,Commit-Interval没有兑现

时间:2011-08-11 12:04:35

标签: rollback spring-batch

假设我的提交间隔为1000.

在写作期间,我在第990条记录中收到错误,该错误可根据跳过政策进行跳过。

因此将发生回滚,编写器将再次开始从记录1中写入相同的记录。

然而,这一次,它是对每条记录的承诺。它不尊重提交间隔。这使得工作进展缓慢。

为什么这样的行为?我在配置中遗漏了什么?

感谢。

1 个答案:

答案 0 :(得分:3)

春天批处理必须要使用bevaviour隔离坏项,基本上它会回滚块并使用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>