当使用@Transactional注释方法并且存在运行时异常时,spring会吃掉该异常并抛出:
org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only
如何避免出现这种“一般”异常并传播原始异常,同时又保持回滚?
谢谢。
答案 0 :(得分:1)
org.springframework.transaction.UnexpectedRollbackException: 事务被静默回滚,因为它已被标记为 仅回滚
如果您有一个外部@Transactional
方法调用一个内部@Transactional
方法,通常会发生这种情况。当内部方法抛出一个异常,但是外部方法捕获到该异常并正常返回时,Spring会感到困惑,并且不知道是应该回滚还是提交事务,因为这两个方法相互矛盾。 (内部方法表示要回滚,而外部方法表示要提交)
因此,检查是否存在任何捕获异常的外部@Transactional
方法。如果是,请从外部方法重新引发该异常,以使整个事务回滚。