Spring Batch 事务限制
对 Spring Batch 有所了解的同学都知道 Batch 是用来进行批量数据处理的。
但是我们在同时使用 Spring JPA 的时候,尤其是循环数据处理的时候,我们希望能够尽快提交事务。
但是,Spring Batch 中,如果使用了 Tasklet 的话,那么Spring 会在 Tasklet 级别创建一个事务。
在 Tasklet 不完成的情况下,事务是不会提交的。
这就需要对我们代码进行进行处理的时候,需要对数据量有多大有比较清楚的了解。
否则,非常容易遇到事务堆叠导致锁表的情况。
解决办法
针对一个 Tasklet 只完成一个特定的工作,如果 Job 的处理数据比较多的话,需要分开不同的 Tasklet 来做。
如上图,哪怕我们在这里调用了不同的服务,调用了不同的数据层。
事务都是没有办法提交的。
简单的办法就是针对上面的操作使用不同的 Tasklet 来做。
有人问过,能不能在循环中一次一次的进行提交。
Spring Batch 这样设计的目的就是为了保持数据的完整性,因此需要对 Batch 的逻辑进行考虑,而不建议考虑怎么省事怎么来。
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2020-10-15 Spring 的 WebSecurityConfigurerAdapter 过滤器
2019-10-15 Hibernate 4 升级到 5 后显示未知实体错误
2019-10-15 Hibernate 4 升级到 Hibernate 5 的时候 SessionFactory 不能使用