Spring事务回滚条件

3 篇文章 0 订阅
2 篇文章 0 订阅

       在spring项目中,很多时候事务出现了异常,但是却没有回滚,导致数据库中产生脏数据。那位为什么明明出现了异常,事务却没有回滚呢,下面分析一下spring事务回滚的条件。

       Spring事务回滚机制是这样的:当所拦截的方法有指定异常抛出,事务才会自动进行回滚!

       1、拦截的方法:

            事务的控制方式有三种:

            ①声明式:使用SpringAop配置事务,这种方式大大的简化了编码。需要注意的是切入点表达式一定要写正确,切入点错误,无法准确拦截方法,会导致事务无法回滚。

            ②注解式:在方法或类上直接使用@Transactional注解,非常简洁方便。

            ③编程式:在代码中手工开启事务,手工提交,出现异常,手工回滚。优点是异常都会回滚捕获,不会出现无法回滚的情况,缺点是太麻烦。

            事务不回滚的都是采用的声明式事务或者是注解事务;编程式事务都是自己写代码手动回滚的,因此是不会出现不回滚的现象。

       2、指定异常:

             默认情况下,事务只会回滚Error错误和RuntimeException运行期异常以及其子类等非受检异常。其他不属于运行其异常,一般不会回滚。但是费云清其异常不是不能回滚,如果想回滚,修改相关配置即可。

              声明式配置如下:

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

              注解式配置如下:

@Transactional@ (rollbackFor=Exception.class)

       3、异常:

             事务要有异常,才会回滚,如果运行期异常被try catch了,但是异常捕获后没有继续抛出RuntimeException运行期异常,事务无法获取异常信息,也不会回滚。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值