Spring事务传播机制问题

Spring事务传播机制问题

  • Question:当代码外层和内层使用Transation注解进行事务操作时,内层操作失败,抛出
    代码如下
@Transaction
methodA(){
   try{
       methodB(){
         throw new   Exception(e);
       }
   }catch(Exception e){
     logger.info("处理失败")!
   }
}
  • 出现异常信息:
javax.servlet.ServletException: org.springframework.web.util.NestedServletException: Request processing failed; 
nested exception is org.springframework.transaction.UnexpectedRollbackException: 
Transaction rolled back because it has been marked as rollback-only
  • 出现问题分析:
    当内部方法出错,导致内部事务认为应该回滚,事务处于回滚状态。向外部方法抛出异常,此时外部直接将异常处理,导致外部事物认为程序正常,事务可以提交,事务处于提交状态。此时外部事务和内部事务是同一个事务,因此该事务不知道是提交,还是回滚。

  • 解决方法
    1.将事务拆分
    TransactionA-start
    TransactionA-commit
    TransactionB-start
    TransactionB-commit
    2.在cathe中回滚事务。
    在cathe中手动调用rollback函数进行失败回滚

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值