【问题标题】:Why do we need setRollbackOnly, not just rollback the transaction?为什么我们需要setRollbackOnly,而不仅仅是回滚事务?
【发布时间】:2020-06-02 05:39:14
【问题描述】:

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

我想知道为什么我们需要setRollbackOnly()?我们为什么不直接打电话给rollback()? 这是JTA的设计吗?

【问题讨论】:

    标签: java spring transactions jta


    【解决方案1】:

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

    案例1:如果Transaction在规定时间内执行,则提交。

    案例2:如果Transaction在一定时间内因为一些异常而出错,那么它会直接调用rollback()

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

    在此之后事务也会执行,即使事务在 60 秒后成功也不会提交,因为有 setRollbackOnly() 标志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 2013-02-14
      • 2021-03-21
      相关资源
      最近更新 更多