美文网首页
Transaction rolled back because

Transaction rolled back because

作者: ericsonyc | 来源:发表于2019-04-23 10:18 被阅读0次

    问题描述

    有段aop事务包裹的代码,每次执行完都会报“Transaction rolled back because it has been marked as rollback-only” 异常。

    错误原因

    上述错误的原因主要在于,一个父事务中包含了多个子事务,父事务和子事务合并成了同一个事务,当其中有子事务代码抛异常并且异常被捕获,并没有继续抛给父事务的话,子事务commit后,状态会被设置为rollback-only;当父事务没有任何错误返回结果时,会检查子事务的状态,发现有回滚状态,则父事务一起进行回滚。

    难点

    这个问题的难点在于异常被子事务吃掉了,而且并没有打日志出来,这样异常日志就只有上面那句话,不过知道原理后,可以看代码中所有子事务中是否用了try....catch捕获了异常,并且没有抛出来。

    教训

    在事务中尽量不要各种try...catch;在明确知道错误的情况下才应该进行try...catch;并且需要把所有错误日志打印出来;还需要注意事务嵌套事务之间的传播级别。

    相关文章

      网友评论

          本文标题:Transaction rolled back because

          本文链接:https://www.haomeiwen.com/subject/fasygqtx.html