我正在添加一些代码,这些代码在Spring中的TransactionSycnhoniztion的beforeCommit()和beforeCompletion()方法中执行。我需要在执行我的代码之前,能够检测到一个事务是否处于活动状态并标记为回滚。
public void beforeCompletion() {
if (transaction inactive and not rolledback)
doit();
}
我如何检测事务是否处于活动状态并且没有回滚?我看到isActualTransactionActive()方法,但没有办法访问事务或确定是否回滚。(除非这些方法在事务被回滚时不被调用)
我看了一下Spring的源代码,AbstractPlatformTransactionManager有processCommit()和processRollback()的方法......。
processCommit()会调用triggerBeforeCommit(),而processRollback不会。
所以答案是beforeCommit()在回滚发生时不被调用......。
beforeCompletion在这两种情况下都会被调用,但在方法参数中传递状态。