为什么我们需要setRollbackOnly,而不仅仅是回滚事务?

问题描述 投票:1回答:1

当我使用 @Transactional 在我的项目中,我将超时设置为60秒,但当进程运行超过60秒后,事务并没有立即回滚,而是直接调用了 setRollbackOnly() 方法将事务标记为仅回滚,当事务试图提交时,它检测到仅回滚标记和回滚。

我想知道为什么我们需要 setRollbackOnly()? 我们为什么不干脆叫 rollback() 這是JTA的設計嗎?

java spring transactions jta
1个回答
0
投票

实际上,当当前事务出现问题时,回滚会被调用(即一些异常),这里你是手动设置超时60秒。

情况1:如果事务在时间内执行,那么它就会提交。

情况2:如果事务在时间内因某些异常而出错,则直接调用。rollback();

案例3:如果交易没有在时间内完成,它设置一个标志。setRollbackOnly().

在这之后,交易也会执行,即使60秒后交易成功,也不会提交,因为有一个 "我的"。setRollbackOnly() 旗帜。

© www.soinside.com 2019 - 2024. All rights reserved.