您的位置:首页 > 编程语言 > Java开发

Spring事务传播机制问题

2017-07-26 10:04 260 查看

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函数进行失败回滚
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring 事务 exception