在 Spring 中使用事务时创建 post 提交

2022-09-01 02:15:20

由于某些原因,我使用Spring PlatformTransactionManager手动执行了事务提交和回滚,我需要做的是设置一个钩子,以便在事务提交后进行提交后操作。

通过查看:

 void commit(TransactionStatus status) throws TransactionException;

我不明白我如何确定交易是否成功,除了假设它,所以如果没有抛出exception。

而且我可以使用AOP作为一个选项,但是程序如何做到这一点,也许使用回调方法?


答案 1

您可以通过更简单的方式获得您想要的,使用TranschangessynchronizationManagerTransportSynchronization

使用 ,您可以使用静态方法来获取有关当前事务的信息,并且可以注册一个允许您在调用该语句时自动执行后提交TransactionSynchronizationManagerTransactionSynchronization

TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization(){
           void afterCommit(){
                //do what you want to do after commit
           }
})

请注意,事务同步是基于每个线程的(这通常不是基本 Web 请求的问题)。


答案 2

感谢Grooveek的答案和Alex在下面的评论-我把它放在这里是因为组合的建议提供了一个坚实而更干净的解决方案,在网络上很难找到。

使用春季 4+。如果在方法成功提交后需要对方法进行回调,只需在方法的开头添加该回调即可:@Transactional

@Service
public class OneService {

    @Autowired
    OneDao dao;

    @Transactional
    public void a transactionalMethod() {
        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter(){
            public void afterCommit(){
                //do stuff right after commit
                System.out.println("commit!!!");

            }
        });
        //do db stuff
        dao.save();
    }
}

推荐