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 首次发布