当我在项目中使用@Transactional时,我将超时设置为60秒。但是在进程运行超过60秒后,事务并没有立即回滚,它只是调用setRollbackOnly()方法将事务标记为仅回滚,当事务尝试提交时,它会检测到仅回滚标记并回滚。
我想知道为什么我们需要setRollbackOnly()?我们为什么不直接打电话给rollback()呢?这是JTA的设计吗?
发布于 2020-06-02 14:22:51
实际上,当当前事务中出现错误(即某些异常)时,会调用回滚。在这里,您手动设置超时60秒。
情况1:如果事务在时间内执行,则提交。
案例二:如果事务在时间内由于某些异常而出错,则直接调用rollback();
情况3:如果事务没有及时完成,则设置一个标志setRollbackOnly()。
在此之后,事务也将执行,即使事务在60秒后成功,它也不会提交,因为有setRollbackOnly()标志。
https://stackoverflow.com/questions/62145563
复制相似问题