美文网首页
几种Spring事务失效的场景

几种Spring事务失效的场景

作者: 小院看客 | 来源:发表于2023-06-06 23:00 被阅读0次

1、方法权限问题

定义的事务方法的访问权限必须是public,是private、default、或protected的话,spring则不会提供事务功能

2、抛出检查异常

如果@Transactional没有特别指定的情况下,Spring只会在运行时异常RuntimeException或者error时进行回滚,而IOException等检查异常不会影响回滚。
解决方案:配置rollbackFor属性,例如@Transactional(rollbackFor = Exception.class)

3、业务方法本身不活了异常

Spring回滚判断是根据是否抛出异常决定的

4、错误的使用了传播机制

Spring事务的传播机制是指在多个事务方法调用时,确定事务应该如何传播的策略。Spring提供了7种事务传播的机制:REQUIRED、SUPPORT、MANDATORY、REQUIRES_NEW、NOT_SUPPORT、NEVER、NESTED
事务传播机制说明:
Propagation.REQUIRED:Spring默认的事务传播机制,在外层有事务的时候加入外层事务,如果外层没有事务就创建一个事务执行。
Propagation.SUPPORT:如果外层存在事务则加入事务,如果外层不存在事务则以非事务的方式执行;
Propagation.NOT_SUPPORT:不支持事务,如果外层存在事务则挂起,执行完当前方法再回复外层事务之行;
Propagation.REQUIRES_NEW:每次都会创建新事务,如果外层存在事务则挂起,当当前事务执行完后恢复外层事务,如果外层无事务,则执行新的事务;
Propagation.MANDATORY:如果外层没有事务则抛出异常;
Propagation.NEVER:不支持外层事务,如果外层有事务则抛出异常;
Propagation.NESTED:该传播机制的特点是可以保存状态保存点,当前事务回滚到某一个点,从而避免所有的嵌套事务都回滚,即各自回滚各自的。

5、没有被Spring管理

不再Spring容器管理中也就无法使用了。

6、方法使用了static或final关键字

spring事务底层使用了aop,通过动态代理生成了代理类,在代理类中实现的事务的功能,使用final或static的话就无法重写被代理的方法

相关文章

网友评论

      本文标题:几种Spring事务失效的场景

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