美文网首页
SpringBoot事务提交后执行后续操作

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

作者: NatureRan | 来源:发表于2019-03-05 22:22 被阅读0次

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

业务场景

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

业务要求

  • 操作A操作数据库失败后,事务回滚,那么操作B不能执行。
  • 操作A执行成功后,操作B也必须执行成功

如何实现

  • 普通的执行A,之后执行B,是可以满足要求1,对于要求2通常需要设计补偿的操作
  • 一般边缘的操作,通常会设置成为异步的,以提升性能,比如发送MQ,业务系统负责事务成功后消息发送成功,然后接收系统负责保证通知成功完成

实现方案

使用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(() -> {
        // ...
    });
}

相关文章

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

    SpringBoot事务提交后执行后续操作 业务场景 业务需求上经常会有一些边缘操作,比如主流程操作A:用户报名课...

  • 事务隔离级别

    事务隔离特性 支持事务的数据库必须满足四个特性: 原子性:整个操作要么执行成功,要么执行失败 持久化:事务提交后就...

  • 3.概念

    1.自动提交:当你的sql语句执行完毕,提交事务,数据库更新操作之间保存到数据2.手动提交事务:在你需要提交事务的...

  • mysql事务隔离级别

    未提交读 A事务已执行,但未提交;B事务查询到A事务的更新后数据;A事务回滚;---出现脏数据 已提交读 A事务执...

  • 面试题

    怎么保证异步操作 在事务提交之后执行 TransactionSynchronizatonManger.regist...

  • MySQL如何定位未提交事务执行的SQL语句?

    一、问题描述 我们经常会碰到这样的情况,某个事务执行完了未提交,后续再来一个DDL和DML操作,导致后面的sess...

  • TCL 事务控制

    事务:作为单个逻辑单元执行的一系列操作,要么完全地执行,要么完全地不执行。commit 提交事务rollback ...

  • 【Mysql】-5 事务

    事务概述 事务提交 事务回滚 事务概述 事务是只用户定义的一系列数据库更新、修改操作,这些操作要么都不执行,要么都...

  • 数据库操作(事务与锁)

    数据操作的流程:发起事务--锁定表--执行逻辑计算--完成事务--提交 事务 概念:指作为单个逻辑工作单元执行的一...

  • 分布式事务

    一、2pc 两阶段提交, 1、预提交(准备提交) 通知各个操作开始执行事务,并搜集各个操作返回的结果。 2、提交或...

网友评论

      本文标题:SpringBoot事务提交后执行后续操作

      本文链接:https://www.haomeiwen.com/subject/kybauqtx.html