spring 事务提交后触发事件
- 某些业务场景严格要求事务提交后,才能触发接口调用(如http接口等)
@Transactional(rollbackFor = Exception.class)
public void save(Demo demo){
demoMapper.insert(demo);
// 有活动的事务
if (TransactionSynchronizationManager.isActualTransactionActive()) {
try {
// 当前线程有活动的事务,事务提交后再发送通知
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
@Override
public void afterCommit() {
log.info(">> 事务提交了,发送消息通知");
messageNotifyService.push(...);
}
});
}catch (Exception e){
log.error("注册事务失败:"+e.getMessage(), e);
}
}
}