Spring Batch 事务限制
2023-09-27 14:20:30 时间
对 Spring Batch 有所了解的同学都知道 Batch 是用来进行批量数据处理的。
但是我们在同时使用 Spring JPA 的时候,尤其是循环数据处理的时候,我们希望能够尽快提交事务。
但是,Spring Batch 中,如果使用了 Tasklet 的话,那么Spring 会在 Tasklet 级别创建一个事务。
在 Tasklet 不完成的情况下,事务是不会提交的。
这就需要对我们代码进行进行处理的时候,需要对数据量有多大有比较清楚的了解。
否则,非常容易遇到事务堆叠导致锁表的情况。
解决办法
针对一个 Tasklet 只完成一个特定的工作,如果 Job 的处理数据比较多的话,需要分开不同的 Tasklet 来做。
如上图,哪怕我们在这里调用了不同的服务,调用了不同的数据层。
事务都是没有办法提交的。
简单的办法就是针对上面的操作使用不同的 Tasklet 来做。
有人问过,能不能在循环中一次一次的进行提交。
Spring Batch 这样设计的目的就是为了保持数据的完整性,因此需要对 Batch 的逻辑进行考虑,而不建议考虑怎么省事怎么来。
相关文章
- 8 -- 深入使用Spring -- 6...2 Spring支持的事务策略
- 8 -- 深入使用Spring -- 6...1 Spring支持的事务策略
- [转]Spring事务嵌套引发的血案---Transaction rolled back because it has been marked as rollback-only
- spring-boot-admin源码分析及单机监控spring-boot-monitor的实现(一)
- [Java][Spring]Spring事务不起作用 问题汇总
- Spring 中经典的 9 种设计模式
- Spring Boot快速开发Web项目
- 【Spring Boot 四】启动之准备系统环境environmentPrepared
- spring中的 classpath* 存在可移植性问题
- aop注解 spring提供的事务
- Spring事务传播特性的浅析——事务方法嵌套调用的迷茫
- 深入实践Spring Boot2.4.2 节点和关系实体建模
- Spring_之注解事务 @Transactional
- 浅析Spring事务失效的情况、原因分析及如何解决:缓存、事务、异步不能在同一个类中相互调用,会失效
- Spring事务不能回滚的深层次原因
- 关于Spring的69个面试问答——终极列表
- 【spring框架】通过注解配置事务(Transaction)
- spring boot高性能实现二维码扫码登录(上)——单服务器版
- CORS support in Spring Framework--官方
- mysql测试spring事务是否生效
- spring transaction源码分析--事务架构
- 声明式事务-整合Spring、Hibernate