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跟源码才可解决

     

  • 相关阅读:
    maven配置
    redis测试
    智慧社区技术总结
    视频导航
    Delphi 任务栏中不显示窗口
    Delphi 设置程序图标为系统默认图标
    清除Windows系统图标缓存
    C/C++ 变量的本质分析
    005 C/C++ 数据类型_void
    004 C/C++ 数据类型_类型别名
  • 原文地址:https://www.cnblogs.com/ssskkk/p/9184495.html
Copyright © 2011-2022 走看看