spring 事务不生效的几种情况

2023-05-16

在这里就不接受spring 事务的ACID特性、事务的传播行为等等,相信看到这篇的大佬们应该也对事务有所了解了不过多阐述。

直接分析事务不生效的原因。

开喽! 

情况(一):

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

情况(二):

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

情况(三):

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

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

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

情况(四):

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

待续。。。。

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring 事务不生效的几种情况 的相关文章

随机推荐