@TransactionalEventListener使用事务后执行回调

@TransactionalEventListener使用事务后执行回调

  • 环境:springboot

  • MyTransactionListener - 事务监听器

@Slf4j
@Component
public class MyTransactionListener {

  @Async("asyncServiceExecutor") // 用了自定义的线程池, 我们当然也可以不用多线程
  @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) // 见名知意: 事务提交后执行
  public void commitedHandle(String say) {
    log.info("AFTER_COMMIT => {}", say);
  }

  @Async("asyncServiceExecutor")
  @TransactionalEventListener(phase = TransactionPhase.BEFORE_COMMIT) // 事务提交前执行
  public void beforeCommitHandle(String say) {
    log.info("BEFORE_COMMIT => {}", say);
  }

  @Async("asyncServiceExecutor")
  @TransactionalEventListener(phase = TransactionPhase.AFTER_COMPLETION) // 无论回滚、提交事务后都执行
  public void afterCompletionHandle(String say) {
    log.info("AFTER_COMPLETION => {}", say);
  }
}

当然还可以自行测试其他方法,如:回滚… 上面的执行方法当然是 最终 => 事务前 => 事务后

  • service - 伪代码
  @Autowired
  private ApplicationEventPublisher applicationEventPublisher;
  
  @Transactional
  public void updViewById(Long id, String ip) { // 用我正在写的项目测试的, 源码就不贴了, 太烂了
    applicationEventPublisher.publishEvent("浏览成功"); // 传递事件, 让监听器执行时打印"浏览成功"
    articleMapper.update(article, articleQueryWrapper); // 更新article文章类
  }
  • test - 执行
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值