TransactionalEventListener

记录下spring的事件机制使用过程中的问题;以下为了方便A方法中执行数据库操作,并发送事件;事件接收处理器为B方法;EventListener注解添加在B方法上;

1.@EventListener

正常情况,B和A为同一个事务,B中读取到的为A中未提交的事务数据;B中抛出异常,会导致A中的事务回滚;

2.@EventListener+Async

A和B是两个事务,之间不会有任何关联;B中方法会立刻执行,所以拿到的数据看当时的数据库数据;

3.@TransactionalEventListener

默认的阶段是TransactionPhase.AFTER_COMMIT

会在A方法执行完成之后,再执行B方法;因为是commit之后,所以B中抛出异常,A中不会回滚;

读取到的也是A中事务的数据,是一个事务;

4.@TransactionalEventListener,phase = TransactionPhase.BEFORE_COMMIT

提交之前,所以抛出异常会影响A中事务的提交,但是读取的数据,是A中的数据是一样的;

5.Async+@TransactionalEventListener

不区分哪个阶段,但是是同一个事务中的数据;而且抛出异常也不会影响A中事务的回滚;

注:TransactionalEventListener的情况下不管有没有async,如果A中发生异常,B是不会执行的;可以理解为回调机制,只有A中执行成功了,B才可以开始执行;而且B不会立即执行,都是A执行之后才开始;这跟EventListener不同;EventListener的情况下加不加Async,B都是立即执行;

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值