Spring事务失效的原因

  1. 抛出异常导致不能正常回滚

        原因:Spring只会回滚非检查异常

        解法:在@Translational中配置rollbackFor属性

  • 业务方法内try-catch异常导致事务不能回滚

        原因:目标自己处理掉异常,事务通知无法知悉

        解法:抛出异常

  • aop切面顺序导致事务不能正常回滚

        原因:事务切面优先级最低,自定义切面优先级若与事务切面一致,则还是自定义切面在内层。若此时自定义切面没有抛出异常,则会使事务不能正常回滚

        解法:同上

  • 非public方法导致事务不能正常回滚

        原因:spring为方法创建代理,添加事务的前提条件是该方法为public

        解法:换成public方法

  • 父子容器导致事务失效

        原因:子容器扫面范围太大,把未添加事务配置的service扫描进去了

        解法:不要用父子容器,把bean放在同一个容器中

  • 调用本类方法导致事务失效

        原因:本类方法调用不经过代理,因此无法增强

        解法:拿到代理来调用

  • 事务没有保证原子行为

        原因:数据库中事务的原子性不包括select方法,synchronized保证了方法的原子性,但由代理操作的commit操作不处于synchronized块内

        解法:synchronized方法应该扩大到代理方法,使用select...for update替换select

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值