1. Spring 提供了事务同步管理器让我们能监听Spring的事务操作,这个可以获取到当前是否存在事务。
TransactionSynchronizationManager.isSynchronizationActive()
2. 这是注册一个监听器,需要传入一个对象TransactionSynchronization
TransactionSynchronizationManager.registerSynchronization()
他有两个方法,一个是事务提交后执行,一个是事务完成后执行(不会区分他是提交还是回滚操作)
@Override
public void afterCommit() {
// 事务后提交
}
public void afterCompletion(int status) {
// 事务完成后执行(不会区分他是提交还是回滚操作)
}
3. 举个例子如下:
//当前事务提交后方可进行异步任务,防止异步任务先于未提交的事务执行
private void callBack(Invoice invoice){
boolean synchronizationActive = TransactionSynchronizationManager.isSynchronizationActive();
if (synchronizationActive) { // 当前存在事务,在事务提交后执行
TransactionSynchronizationManager.registerSynchronization(
new TransactionSynchronizationAdapter() {
@Override
public void afterCommit() { // 监听事务提交完成
doCall(invoice);
}
}
);
} else {
// 当前不存在事务,直接执行
doCall(invoice);
}
}