在我的 Spring 应用程序中,我将服务层方法标记为@Transactional(propagation=Propagation.REQUIRED)
并且正在使用<tx:annotation-driven />
. 通常,当方法完成时自动提交事务的默认行为就像一个魅力。但在特定情况下,我需要在方法结束前不久提交 - 是的,即使在那之后的部分抛出异常。
在这种方法中是否有办法访问当前事务?我试过这个:
TransactionDefinition td = new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_MANDATORY); // make sure we're talking about the same transaction already provided by the annotation
TransactionStatus status = transactionManager.getTransaction(td);
// perform various JDBC operations
transactionManager.commit(status);
methodThatNeedsToBeCalledAfterCommit();
但是查看我的日志,我只看到“AbstractPlatformTransactionManager.processCommit(752) | 启动事务提交”发生一次,并且从时间戳来看,这似乎是after methodThatNeedsToBeCalledAfterCommit()
,这将是@Transactional
方法的正常行为。
有没有办法在这种方法中实际强制提交?