如何避免org.springframework.transaction.UnexpectedRollbackException?

时间:2019-05-28 16:39:09

标签: spring spring-boot

当使用@Transactional注释方法并且存在运行时异常时,spring会吃掉该异常并抛出:

org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only

如何避免出现这种“一般”异常并传播原始异常,同时又保持回滚?

谢谢。

1 个答案:

答案 0 :(得分:1)

  

org.springframework.transaction.UnexpectedRollbackException:   事务被静默回滚,因为它已被标记为   仅回滚

如果您有一个外部@Transactional方法调用一个内部@Transactional方法,通常会发生这种情况。当内部方法抛出一个异常,但是外部方法捕获到该异常并正常返回时,Spring会感到困惑,并且不知道是应该回滚还是提交事务,因为这两个方法相互矛盾。 (内部方法表示要回滚,而外部方法表示要提交)

因此,检查是否存在任何捕获异常的外部@Transactional方法。如果是,请从外部方法重新引发该异常,以使整个事务回滚。