首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring批处理中的提交间隔和回滚处理

Spring批处理中的提交间隔和回滚处理
EN

Stack Overflow用户
提问于 2012-07-11 09:08:05
回答 2查看 21.7K关注 0票数 13

我的问题涉及Spring批处理和事务。

假设我选择了一个提交间隔50作为我的步骤之一。

另外,假设我总共有1000个记录,其中一个将导致itemWriter失败,从而导致整个块回滚(我的示例中有50个记录)。

在作业完成后(忽略有问题的块),有哪些州可以确保将49条有效记录写入数据库?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-11 12:38:57

经过一番研究,我得出如下结论:

如果项目编写器未能提交一个块(这里有50个项),从而导致回滚,Spring批处理将分别为每个项重新运行问题块的每个项,并为每个项执行一个提交/事务。

因此,除了导致Spring批处理回块的一个项之外,所有49个项都将出现在数据库中。

票数 19
EN

Stack Overflow用户

发布于 2019-04-03 03:56:18

我们的重点是在阅读阶段跳过项目,但是跳过配置也适用于面向块的步骤的处理和写入阶段。当在读取、处理或写入阶段抛出可跳异常时,Spring批处理不会以相同的方式驱动面向块的步骤。 当一个项目读取器抛出一个可跳过的异常时,Spring只是再次调用项目读取器上的read方法来获取下一个条目。事务上没有回滚。当项处理器抛出一个可跳过的异常时,Spring批处理回滚当前块的事务,并将读取的项重新提交到项处理器,但在前一次运行中触发可跳异常的项除外。图8.3显示了当项目编写器抛出一个可跳过的异常时Spring所做的事情。因为框架不知道哪个项抛出了异常,所以它在自己的事务中逐个重新处理块中的每个项。

我引用Spring Batch in Action, Manning书中的这段话。

这是相当棘手的,回滚行为是不同的取决于异常是抛出在读取,处理还是写入。

希望这能帮到别人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11429197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档