TransactionSynchronizationManager和事务回滚检测

时间:2020-04-24 14:38:46

标签: spring-transactions

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

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

如何检测事务是否处于活动状态而不回滚?我看到了方法isActualTransactionActive(),但是看不到任何访问事务或确定是否回滚的方法。 (除非交易回滚,否则不会调用那些方法)

1 个答案:

答案 0 :(得分:0)

我一直在浏览Spring源代码,AbstractPlatformTransactionManager具有用于processCommit()和processRollback().....

的方法。

processCommit()调用triggerBeforeCommit(),而processRollback不调用。

因此答案是发生回滚时未调用beforeCommit()...。

在两种情况下都调用

和beforeCompletion,但是在方法参数中传递状态。