zoukankan      html  css  js  c++  java
  • Transaction rolled back because it has been marked as rollback-only

    出现这种错误的原因

    1.接口A 调用了接口B

    2.接口B报异常了,没有在B里面进行try catch捕获

    3.接口A对 接口B进行了try catch捕获

    因为接口B报异常 会把当前事物A接口的事物(如果B没有开启新的事物) 标志成rollback-only

    然后因为接口A对B进行了try catch 所以接口A会一直往下走,等接口结束commit的时候会报错

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

    因为A的事物 被B标志成rollback-only了

    解决办法

    1.B接口里面就对异常做try catch处理

    2.B接口设置事物的传播行为Propagation设置为Requires_new。或者A接口的Propagation设置为NESTED

    3.不对接口B进行try catch处理  这样会自动把B的错误抛出来,而不是报上面那个错

    一直以为 遇到异常 try catch 不会影响到当前的事物,但是Spring管理的事物,并不是这样。

    遇见一些不常见的问题 需要Debug跟源码才可解决

     

  • 相关阅读:
    SQL 执行进展优化
    初识SQL 执行顺序
    前端模块化开发的价值(转)
    js 闭包之一
    js模块开发(一)
    简单说说call 与apply
    js 爱恨情仇说 this
    说说 js String
    $Ajax简单理解
    SQL-如何使用 MongoDB和PyMongo。
  • 原文地址:https://www.cnblogs.com/ssskkk/p/9184495.html
Copyright © 2011-2022 走看看