美文网首页
springboot @Transactional事务失效

springboot @Transactional事务失效

作者: 盼旺 | 来源:发表于2023-10-30 15:36 被阅读0次

@Transactional声明式事务是基于AOP的

而AOP是基于动态代理实现的

所以不想要让事务失效,就要使用代理对象的方法

所以问题就是什么情况下他不会走到代理对象的方法

1.同一个类当中的方法调用

不管你是调用的公有方法还是私有方法他都是通过this调用的真实对象不会走到代理的

2.调用的是static方法

因为这种方法他是属于类的,并不是某个对象的,所以他是无法被代理对象调用的

3.final方法也是无法走代理的

因为aop创建的代理对象无法对final方法进行子类化和覆盖,所以无法拦截这些方法的

除此之外,失效还可能和Transactional中注解的两个属性有关

一个是propagation 一个是rollbackFor
propagation设置错误,比如说设置成了 not_supported 那么事务肯定是会失效的

而rollbackFor 他默认只处理RuntimeException的,如果发生了别的异常,事务是不会回滚的,所以需要特别注意,我们需要手动设置为 Exception

另外如果异常呗捕获了,不管是方法内部捕获了,还是别的切面优先给捕获了,都是不会回滚的

还有就是有得数据库他不支持事务那这种情况spring再牛逼也无能为力

相关文章

网友评论

      本文标题:springboot @Transactional事务失效

      本文链接:https://www.haomeiwen.com/subject/sppbidtx.html