Spring优雅的在事务提交/回滚前后插入业务逻辑

业务背景

业务那边想要统计下我们这边每天注册商户成功和失败的数量,你看看怎么给他弄下这个功能

功能实现

TransactionSynchronizationManager.registerSynchronization,发现这是spring事务提供的注册回调接口的方法。

在事务注解方法中,通过该方法注册事务回调接口后,spring会在事务提交/回滚前后调用注册的回调接口的对应方法,方法如下:

  1. suspend:在spring开启新事务,获取connection之前会调用
  2. resume:开启新事务失败时会调用
  3. flush:没调用
  4. beforeCommit:事务提交前会调用
  5. beforeCompletion:事务提交前会调用,在beforeCommit之后)
  6. afterCommit:事务提交后会调用
  7. afterCompletion:事务提交后会调用,在afterCommit之后

了解TransactionSynchronization的用法后,业务代码如下

@Transactional(rollbackFor = Exception.class)
public Integer registerCustomer(LvmsDelegateDTO newDelegateDTO) {
        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
            @Override
            public void afterCompletion(int status) {
                if (TransactionSynchronization.STATUS_COMMITTED == status) {
                    lvmsDelegateBO.insert();
                } else if (TransactionSynchronization.STATUS_ROLLED_BACK == status) {
                    lvmsDelegateBO.insert();
                }
            }
        });
        return lvmsDelegateBO.insert(newDelegateDTO);
    }

 如果status为STATUS_COMMITTED表示方法正常,事务已提交,需要插入成功记录,如果status为STATUS_ROLLED_BACK则说明发生了异常,事务已回滚,则插入失败记录,完美!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值