@Transactional 事务回滚 总结

2 篇文章 0 订阅
1 篇文章 0 订阅
  1. 方法是不是 public 修饰的

  2. 是否是同一个类中的方法调用(如A方调用同一个类中的B方法,在B方法上加的事务)
    注意:
    方法A上: @Transactional(rollbackFor = Exception.class)
    方法B上: @Transactional(rollbackFor = Exception.class)
    1、如果在B方法加上TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();,结果是事务正常回滚,控制台打印出少量异常,前端无异常信息,格式例子在第4条上)
    2.、如果去掉 上面 1 ,则控制台打印出少量异常,前端返回异常信息

  3. 异常类型是否为unchecked异常?如果想check异常也想回滚怎么办,注解上面写明异常类型即可。

@Transactional(rollbackFor=Exception.class) 

类似的还有 norollbackFor,自定义不回滚的异常

  1. 异常是不是被catch住了,如果既要打出异常日志,又要回滚,如下
@Transactional(rollbackFor = Exception.class)
public void test() { 
     try { 
        updata(); 
        updata2(); 
     } catch (Exception e) { 
          e.printStackTrace();    
          //如果updata2()抛了异常,updata()会回滚,不影响事物正常执行                                                                             
          TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
     } 
  1. 查看自己的数据的引擎,如果是 MySQL,注意表要使用支持事务的引擎,比如innodb,如果是myisam,事务不起作用

查看 MySQL 的所有存储引擎:show engines;
查看 MySQL 的当前存储引擎:show variables like ‘%storage_engine%’;

6、如果是 ssm 框架,在用 xml 配置开启的事务,那你要看一下:

  • 是否开启了对注解的解析
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
  • spring是否扫描到你这个包,如下是扫描到org.test下面的包
<context:component-scan base-package="org.test" ></context:component-scan>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值