首页 > 解决方案 > TransactionSynchronizationManager 和事务回滚的检测

问题描述

我正在添加一些在 Spring 中 TransactionSycnhoniztion 的 beforeCommit() 和 beforeCompletion() 方法中执行的代码。在执行我的代码之前,我需要能够检测到事务处于活动状态并标记为回滚..

public void beforeCompletion() {
    if (transaction inactive and not rolledback)
        doit();
}

如何检测事务是否处于活动状态且未回滚?我看到方法 isActualTransactionActive() 但看不到访问事务或确定是否回滚的方法。(除非事务回滚时不会调用这些方法)

标签: spring-transactions

解决方案


我正在查看 Spring 源代码,AbstractPlatformTransactionManager 有 processCommit() 和 processRollback() 的方法.....

processCommit() 调用 triggerBeforeCommit() 而 processRollback 没有。

所以答案是在发生回滚时不会调用 beforeCommit() ......

在这两种情况下都会调用 beforeCompletion,但会在方法参数中传递状态。


推荐阅读