记录一次spring事务失效问题

Posted julf资讯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录一次spring事务失效问题相关的知识,希望对你有一定的参考价值。

最近在用到Spring事务时候出现了一点问题,折腾了很久才发现问题,特此记录下来,以供大家借鉴,有什么问题欢迎留言。然后在网上看了一些关于Spring事务管理的文章,参考的文章如下:

  • Spring事务机制详解

  • Spring事务配置的五种方式

  • Spring中的事务管理实例详解

  • Spring事务管理(详解和实例)

事务的ACID,Spring事务管理,传播行为和隔离级别具体概念就不一一介绍了,直接描述我遇到的问题。


在近期开发一个项目中,遇到了批量操作,就是对一个人员列表做批量业务操作,我的本意是一个人员一个人员下发,彼此有错不会影响其他人员的业务。核心代码如下:

代码正常情况下是没有问题的,但是当我调试异常情况,比如第二个人有异常,这时候第一个人居然回滚了,我很纳闷,在addByWorker方法上也加了Propagation.REQUIRES_NEW,但是就是全部回滚了,大家可以先想想为什么?       


思索很久,才在网上找到了一个帖子:

https://blog.csdn.net/duanlb_001/article/details/70159694

感谢博主提供的方案,最终解决了问题。

先看下解决方案:

没错就是加了workerTaskService,把addByWorker方法写到了另一个Service里,这样每个人的事务就不会有影响,每个人都可以正常提交, 一个人有问题,其他人可以正常入库不会回滚。


其实Spring的事务传播级别是类级别的,如果类中的一个方法使用的某一个类型的事务,那么整个类的事务都是一种事务,而且回滚级别也是类级别的。Spring事务认定级别以类为单位,所以只有退出类的调用时,对会触发事务的提交或回滚。所以即使在同个类中调用不同的事务级别,也是没有意义的。


以上是关于记录一次spring事务失效问题的主要内容,如果未能解决你的问题,请参考以下文章

一次想不到的Spring事务失效问题跟踪(事务不会滚)

美团二面之Spring 事务监听,为什么会出现事务失效?

spring的@Transactional失效原因分析

spring事务失效的几种场景以及原因

记一次 Spring Boot 中 @Transactional事务中使用内置锁限制总数失效的BUG

Spring事务踩坑记录