事务(十二)

spring 事务不生效的几种情况

情况(一):

 1 /**
 2  * @Description //lf 事务不生效 情况 (一)
 3  **/
 4 @Override
 5 public boolean ta(Config config) {
 6     //lf 当没有 @Transactional 注解的方法(ta)调用添加 @Transactional 注解的方法(tb)
 7     // 这时调用完成后 ta 抛出异常,
 8     // @Transactional原理是基于spring aop,aop又是动态代理模式的实现 内部调用,没有走代理,
 9       //   用的是this
10     
11     tb(config);
12     int a=1/0;
13     return true;
14 }
15 @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
16 public Boolean tb(Config config){
17     save(config);
18     return true;
19 }

情况(二):

1   @Transactional(propagation = Propagation.REQUIRED)
2     public Boolean tb(Config config){
3         // lf  非RuntimeException 错误,都不会回滚。
4         //  所以这情况需要在 注解里添加rollback = Exception.css, 所有异常都进行回滚
5         save(config);
6         return true;
7     }

情况(三):

这三种情况都不会生效,当然现在idea很只能了,添加这些是不能和@Transactional 注解同时存在的

所有还有事务注解的方法 一定是public 标识,

  • private 方法无法添加事务管理.
  • final 方法无法添加事务管理.
  • static 方法无法添加事务管理.

情况(四):

 1   /**
 2      * @Description //lf 事务不生效 情况(四)  
 3      */
 4     @Transactional(propagation = Propagation.REQUIRED)
 5     public boolean ta1(Config config) {
 6         // lf 添加了try{}catch 也不会进行回滚 需要把异常抛出或 设置事务回滚
 7         try {
 8             tb1(config);
 9             int a=1/0;
10         } catch (Exception e) {
11             // lf 设置事务回滚
12             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
13         }
14         return true;
15     }

转载:https://blog.csdn.net/qq_38380025/article/details/105859817








带着疑问去思考,然后串联,进而归纳总结,不断追问自己,进行自我辩证,像侦查嫌疑案件一样看待技术问题,漆黑的街道,你我一起寻找线索,你就是技术界大侦探福尔摩斯
原文地址:https://www.cnblogs.com/cainiao-Shun666/p/14531324.html