热点新闻
发布订阅 - 确保用户注册成功发送短信通知
2023-08-01 12:41  浏览:1411  搜索引擎搜索“手机晒展网”
温馨提示:为防找不到此信息,请务必收藏信息以备急用! 联系我时,请说明是在手机晒展网看到的信息,谢谢。
展会发布 展会网站大全 报名观展合作 软文发布

Spring事务监听机制—使用@TransactionalEventListener处理数据库事务提交成功后再执行操作

  • 为什么使用  
      在项目中,往往需要执行数据库操作后,发送消息或事件来异步调** * 用其他组件执行相应的操作,例如:
      用户注册后发送激活码;
      配置修改后发送更新事件等。
      但是,数据库的操作如果还未完成,此时异步调用的方法查询数据库发现没有数据,这就会出现问题。
  • 为了解决上述问题,Spring为我们提供了两种方式:
      (1) @TransactionalEventListener注解
      (2) 事务同步管理器TransactionSynchronizationManager
      以便我们可以在事务提交后再触发某一事件。
    1、定义被监听的元素

@Data @AllArgsConstructor public class UserEvent { private final User user; }

2、定义监听事件

@Component public class UserEventListener { @Async @TransactionalEventListener(classes = SaveUserEvent.class,phase = TransactionPhase.AFTER_COMMIT ) void onSaveUserEvent(SaveUserEvent event) { Integer id = event.getEventData(); User u = userDao.getUserById(id); String phone = u.getPhoneNumber(); MessageUtils.sendMessage(phone); } }

3、发布事件

@Service public class UserServiceImpl implements UseService { @Autowired private ApplicationContext applicationContext; @Transaction void saveUser(User u) { //保存用户信息 userDao.save(u); //触发保存用户事件 applicationContext.publishEvent(new SaveUserEvent(u.getId())); } }

更详细的介绍
https://blog.csdn.net/qq_41378597/article/details/105748703

发布人:32e6****    IP:117.173.60.***     举报/删稿
展会推荐
让朕来说2句
评论
收藏
点赞
转发