java事务中使用try catch 导致事务不回滚的问题

@Transactional注解的触发,只回滚RuntimeException和Error异常,默认不回滚非RuntimeException异常

解决方法:

1.方法前添加注解(基础的  @Transactional注解:只能拦截RuntimeException和Error异常)

@Transactional(rollbackFor = Exception.class)  //抛出捕获的非RuntimeException异常

2.catch中添加(手动进行回滚)

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//手动回滚

3.在catch中手动抛出运行时异常

throw new RuntimeException(e);//(惰性处理,不建议)
      try {

             //业务代码
      } catch (Exception e) {
             throw new RuntimeException(e);
      }

注意:第一点和第二点 建议一起使用,如果接口本身有封装事务,在不了解原有事务配置的情况下,又没有声明 @Transactional(rollbackFor = Exception.class) 注解,可能导致事务手动回滚失败。

    @RequestMapping("channelAdd")
    @ResponseBody
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult channelAdd( PcChannelVo vo) throws Exception {
     
        try {
            //业务代码
           
        } catch (Exception e) {
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//手动回滚
            log.error("异常",JsonUtil.toJSON(vo),e);
            return AjaxResult.error("");
        }finally {
    }

如果以上三种方法都没有解决事务不回滚问题:

可以在调用该方法的方法,加@Transactional。在上级方法添加@Transactional,不管调用的方法如何,有报错就会执行回滚。也就不用管是否加了try{}catch{}。

转载:

(232条消息) try{}catch{}中事务不回滚_天狼1222的博客-CSDN博客icon-default.png?t=MBR7https://blog.csdn.net/qq_35461948/article/details/122506591

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值