spring中transaction注解本地事务失效的问题

1、问题描述:在对数据库增删改的方法上加了@transaction注解,又由于业务需求,在方法中有异常出现时,需要打印日志。所以在方法内部进行了try捕获异常,此时如果有异常发生就不会触发@transaction注解的事务回滚。
2、原因:@transaction注解底层基于动态代理实现事务的支持(动态代理对象调用方法前开启事务,捕获到异常后回滚事务),我们在方法内部进行了手动try捕获异常,此时动态代理对象就捕获不到异常了(异常被我们手动捕获了,没有向外抛出),所以动态代理对象就不会进行事务的回滚。
3、解决方法:
1、不在方法内部手动捕获对象,所有的异常都回抛出。
2、在手动捕获异常后,进行业务处理,然后再将该异常手动抛出。
3、手动捕获异常后,进行业务处理。然后不抛出异常,而在catch中通过调用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()方法将当前事务状态设置为只能回滚。
4、总结:我选用的是第三种解决方法。因为业务需求,在捕获异常后还有其他代码需要执行,而前两种方法catch代码块之后的代码就执行不到了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值