交易同步管理器和检测交易回滚。

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

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

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

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

spring-transactions
1个回答
0
投票

我看了一下Spring的源代码,AbstractPlatformTransactionManager有processCommit()和processRollback()的方法......。

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

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

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

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