Spring事务嵌套导致的异常,Transaction rolled back because it has been marked as rollback-only

转载 2021-12-15 14:28 Java 29

Transaction rolled back because it has been marked as rollback-only

1. 原因

  • 线上故障,后来定位异常,最终发现是spring事务嵌套的导致的,特此记录
我追查了代码,发现是事务嵌套的问题,网上搜了很多,最终

YourBatman的博客解决了我的问题

发生回滚(在类上添加了@Transactional注解,所以后面的方法都是有事务的)发生回滚(在类上添加了@Transactional注解,所以后面的方法都是有事务的)
1. 嵌套事务的情况,发生异常正常回滚
  • 添加transactional注解后当发生异常,回滚

新增文章分类

  • 新增文章
  • 测试

数据发生异常且正常回滚

2. 嵌套事务的情况,发生异常报Transaction rolled back because it has been marked as rollback-only
  • 使用try catch包起来,然后报异常
  • 解决方案:在catch中添加TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

  • 或者尽量不要在service中try catch

点赞
收藏
关注
转发
本文作者: Veddy
版权声明: 本博客所有文章除特别声明外,均采用 CC BY 4.0 CN协议进行许可。转载请署名作者且注明文章出处。
文章目录