SpringBoot事务提交后执行后续操作

2019-03-05  本文已影响0人  NatureRan

SpringBoot事务提交后执行后续操作

业务场景

业务需求上经常会有一些边缘操作,比如主流程操作A:用户报名课程操作入库,边缘操作B:发送邮件或短信通知。

业务要求

如何实现

实现方案

使用TransactionSynchronizationManager在事务提交之后操作

@Component
public class CallBackService {

    public void execute(final CallBackAction action) {

        if (TransactionSynchronizationManager.isActualTransactionActive()) {
            TransactionSynchronizationManager
                    .registerSynchronization(new TransactionSynchronizationAdapter() {
                        @Override
                        public void afterCommit() {
                            // 事务提交后执行回调
                            action.callback();
                        }
                    });
        } else {
            // 事务提交后执行回调
            action.callback();
        }

    }

}
public interface CallBackAction {
    /**
     * 普通事务回调
     */
    void callback();
}
@Override
@Transactional()
public void save() {
    User user1 = new User();
    User user2 = new User();
    userMapper.insert(user1);
    userMapper.insert(user2);
    // 在事务提交后执行
    callBackService.execute(() -> {
        // ...
    });
}
上一篇 下一篇

猜你喜欢

热点阅读