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