package com.example.demo.util;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;
public class TransactionUtils {
public static void doAfterTransaction(DoTrabsactionCompletion doTrabsactionCompletion){
TransactionSynchronizationManager.registerSynchronization(doTrabsactionCompletion);
}
@Transactional
public void doTx(){
// start tx
TransactionUtils.doAfterTransaction(new DoTrabsactionCompletion(()->{
// sen MQ... RPC...
}));
}
}
class DoTrabsactionCompletion implements TransactionSynchronization {
private Runnable runnable;
public DoTrabsactionCompletion(Runnable runnable) {
this.runnable = runnable;
}
@Override
public void afterCompletion(int status) {
if (status == TransactionSynchronization.STATUS_COMMITTED){
this.runnable.run();
}
}
}
Spring 事务回调
于 2022-11-13 12:50:26 首次发布
本文介绍了Spring事务管理中的一种扩展机制——TransactionSynchronization,通过示例展示了如何在事务提交后执行特定操作,如发送MQ消息或RPC调用。TransactionSynchronizationManager注册回调并在事务完成后执行DoTrabsactionCompletion中的逻辑,确保操作与事务同步。
摘要由CSDN通过智能技术生成