最近接到一个业务,其中我需要用做的就是插入用户数据到数据库,并发送短信给客户,所以我要保证一定是事务commit 之后,我才可以发送短信。
所以我查找spring 资料,发现 TransactionSynchronizationManager(事务同步管理器)可以满足我的需求,接下我演示我的实现过程。
1.定义事务回调的方法
/**
* 事务回调执行
* @author : lxq
*/
public interface TransactionCallBackAction {
/**
* 普通事务回调
*/
void callback();
}
2.使用事务同步管理器,事务提交之后执行回调
@Component
public class TransactionCallBackService {
public void execute(final TransactionCallBackAction action) {
//判断Transaction对象是否处于活动状态
if (TransactionSynchronizationManager.isActualTransactionActive()) {
//建立新的Transaction对象用于执行回调
TransactionSynchronizationManager
.registerSynchronization(new TransactionSynchronizationAdapter() {
@Override
public void afterCommit() {
// 事务提交后执行回调
action.callback();
}
});
} else {
// 事务提交后执行回调
action.callback();
}
}
}
3.在实战中的使用