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

业务背景

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

功能实现

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

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

Spring优雅的在事务提交/回滚前后插入业务逻辑_第1张图片

Spring优雅的在事务提交/回滚前后插入业务逻辑_第2张图片

  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则说明发生了异常,事务已回滚,则插入失败记录,完美!!

你可能感兴趣的:(spring,java)