实战
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;
public class TransactionUtils {
/**
* 事务后置处理,可以 优化大事务提升连接池性能,尽量保证分布式事务一致性
*
* @param runnable
*/
public static void doAfterTransaction(Runnable runnable) {
if (TransactionSynchronizationManager.isActualTransactionActive ()) {
TransactionSynchronizationManager.registerSynchronization (new DoTransactionCompletion (runnable));
}
}
}
/**
* 事务完成后置回调函数定义
*/
class DoTransactionCompletion implements TransactionSynchronization {
private Runnable runnable;
public DoTransactionCompletion(Runnable runnable) {
this.runnable = runnable;
}
@Override
public void afterCompletion(int status) {
if (status == TransactionSynchronization.STATUS_COMMITTED) {
this.runnable.run ();
}
}
}
测试
/**
* demo
*/
@Transactional
//方法不能是 final的
public void doTx() {
System.out.println ("start tx");
TransactionUtils.doAfterTransaction (() -> {
//事务提交后处理一些逻辑
System.out.println ("after commit do..");
});
System.out.println ("tx do end");
}
输出:
start tx
tx do end
after commit do…