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

本文深入解析了在服务调用中遇到的事务回滚异常。当服务A传递事务给服务B,B执行时抛出异常但被捕获,事务被标记为回滚。即使异常被处理,A在后续提交事务时会因事务已被标记为回滚-only而抛出错误。此现象涉及到分布式事务、异常处理和数据库事务一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说结论:你try-catch了抛出的异常,抛出异常前或后有同事务sql执行,导致抛出异常了代码还正常走完了,走完后事务要执行提交操作时,就会抛出这个rollback-only的异常了

原因分析:比如a服务调用b服务,a将事务传递给了b,b执行过程中抛出异常,然后被a捕获或者b自己捕获了,但是这个时候因为有异常抛出导致b事务被标记了回滚,但是异常已经被捕获了,导致a不知道执行异常了,还在正常完成逻辑处理,当a执行完后,事务要提交了,这个时候去数据库提交事务,被数据库告知,你这个事务已经被标记为回滚了不能提交了,然后a把这个Transaction rolled back because it has been marked as rollback-only异常抛出来,然后就被你发现了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值