当我使用 @Transactional
在我的项目中,我将超时设置为60秒,但当进程运行超过60秒后,事务并没有立即回滚,而是直接调用了 setRollbackOnly()
方法将事务标记为仅回滚,当事务试图提交时,它检测到仅回滚标记和回滚。
我想知道为什么我们需要 setRollbackOnly()
? 我们为什么不干脆叫 rollback()
這是JTA的設計嗎?
实际上,当当前事务出现问题时,回滚会被调用(即一些异常),这里你是手动设置超时60秒。
情况1:如果事务在时间内执行,那么它就会提交。
情况2:如果事务在时间内因某些异常而出错,则直接调用。rollback()
;
案例3:如果交易没有在时间内完成,它设置一个标志。setRollbackOnly()
.
在这之后,交易也会执行,即使60秒后交易成功,也不会提交,因为有一个 "我的"。setRollbackOnly()
旗帜。