Spring Batch 事务限制

对 Spring Batch 有所了解的同学都知道 Batch 是用来进行批量数据处理的。

但是我们在同时使用 Spring JPA 的时候,尤其是循环数据处理的时候,我们希望能够尽快提交事务。

但是,Spring Batch 中,如果使用了 Tasklet 的话,那么Spring 会在 Tasklet 级别创建一个事务。

在 Tasklet 不完成的情况下,事务是不会提交的。

这就需要对我们代码进行进行处理的时候,需要对数据量有多大有比较清楚的了解。

否则,非常容易遇到事务堆叠导致锁表的情况。

解决办法

针对一个 Tasklet 只完成一个特定的工作,如果 Job 的处理数据比较多的话,需要分开不同的 Tasklet 来做。

如上图,哪怕我们在这里调用了不同的服务,调用了不同的数据层。

事务都是没有办法提交的。

简单的办法就是针对上面的操作使用不同的 Tasklet 来做。

有人问过,能不能在循环中一次一次的进行提交。

Spring Batch 这样设计的目的就是为了保持数据的完整性,因此需要对 Batch 的逻辑进行考虑,而不建议考虑怎么省事怎么来。

Spring Batch 事务限制 - Spring - OSSEZ

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HoneyMoose

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值