Spring中的事务回滚

发布时间:2020-06-15 14:07:52 作者:浅嫣
来源:网络 阅读:632

Spring中的事务回滚

  

1.代码中事务控制的3种方式

2.事务不回滚的原因

    在工作中,看过别人写的代码出现了事务不回滚的现象。当然,事务不回滚的都是采用的声明式事务或者是注解事务;编程式事务都是自己写代码手动回滚的,因此是不会出现不回滚的现象。

 

    再说下声明式事务和注解事务回滚的原理:当被切面切中或者是加了注解的方法中抛出了RuntimeException异常时,Spring会进行事务回滚。默认情况下是捕获到方法的RuntimeException异常,也就是说抛出只要属于运行时的异常(即RuntimeException及其子类)都能回滚;但当抛出一个不属于运行时异常时,事务是不会回滚的。

 

    下面说说我经常见到的3种事务不回滚的产生原因:

3.如何保证事务回滚

    正常情况下,按照正确的编码是不会出现事务回滚失败的。下面说几点保证事务能回滚的方法

                        ① 声明式事务,在配置里面添加一个rollback-for,代码如下

 <tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>

 1 <tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception"/> 

                        ② 注解事务,直接在注解上面指定,代码如下

 

@Transactional(rollbackFor=Exception.class)

Spring中的事务回滚

/** TransactionAspectSupport手动回滚事务:*/
       @Transactional(rollbackFor = { Exception.class })  
       public boolean test() {  
            try {  
               doDbSomeThing();    
            } catch (Exception e) {  
                 e.printStackTrace();     
                 //就是这一句了, 加上之后抛了异常就能回滚(有这句代码就不需要再手动抛出运行时异常了)                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();  
                 return false;
            }  
           return true;
      }


推荐阅读:
  1. laravel数据库事务回滚
  2. spring 事务回滚和常见异常

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

spring 事务回滚 sprin

上一篇:浏览器的事件循环的机制流程

下一篇:Vue触控组件的使用方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》