Spring事务传播机制问题

来源:互联网 发布:mac访客账户 编辑:程序博客网 时间:2024/06/14 06:04

Spring事务传播机制问题

  • Question:当代码外层和内层使用Transation注解进行事务操作时,内层操作失败,抛出
    代码如下
@TransactionmethodA(){   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函数进行失败回滚