if (!shouldCommitOnGlobalRollbackOnly() && defStatus.isGlobalRollbackOnly())
前面的 shouldCommitOnGlobalRollbackOnly 默认为 false:
问题就精简为了:defStatus.isGlobalRollbackOnly() 为什么是true?
为什么?
因为 sellProductBiz 抛出异常后,会调用 completeTransactionAfterThrowing 方法执行回滚逻辑。
肯定是这个方法里面搞事情了啊。
org.springframework.transaction.support.AbstractPlatformTransactionManager#processRollback
在这里,把链接的 rollbackOnly 置为了 true。
所以,后面的事务想要 commit 的时候,一检查这个参数,哦豁,回滚吧。
大概就是这样的:
如果这不是你期望的异常,怎么解决呢?
理解了事务的传播机制就简单的一比:
就这样,新开个事务,跑起来没毛病,互不干扰。
最后说一句好了,看到了这里安排个关注吧,周更原创很累的,需要一点正反馈。
感谢您的阅读,我坚持原创,十分欢迎并感谢您的关注。
我是 why,你也可以叫我小歪,一个主要写代码,经常写文章,偶尔拍视频的程序猿。