Spring 中TransactionalEventListener事务提交后操作
在某些特定的业务场景下,我们可能需要在事务成功提交之后,再做某些操作,而不能将这些操作放在事务代码中,事务还未提交就已经执行了,那这种情况之下,spring提供的TransactionalEventListener就会派上用场了。
使用demo
@Service @Slf4j public class UserService implements ApplicationEventPublisherAware { private ApplicationEventPublisher eventPublisher; @Autowired private JdbcTemplate jdbcTemplate; @Transactional public void demo() { User user = new User("zhangsan", "M", 30); // 发布事件,等事务commit之后执行 eventPublisher.publishEvent(new DemoEvent(user)); jdbcTemplate.update( "insert into t_user (`name`, `sex`, `age`) values (?, ?, ?)", user.getName(), user.getSex(), user.getAge()); log.info("事务中的业务逻辑执行完毕"); } @Override public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) { this.eventPublisher = applicationEventPublisher; } } public class DemoEvent extends ApplicationEvent { public DemoEvent(Object source) { super(source); } } @Component @Slf4j public class DemoListener { @TransactionalEventListener( phase = TransactionPhase.AFTER_COMMIT, classes = DemoEvent.class) public void onEvent(DemoEvent demoEvent) { log.info("收到事件,事件源是:{}", demoEvent.getSource()); // todo 事务提交后的业务处理 } }
1. 调用DemoService的demo方法时,控制台输出
事务中的业务逻辑执行完毕
收到事件,事件源是:User(name=zhangsan, sex=M, age=30)
2. 如果业务代码中抛出异常,事务回滚,则监听器中的逻辑将不会执行
@Transactional public void demo() { User user = new User("zhangsan", "M", 30); // 发布事件,等事务commit之后执行 eventPublisher.publishEvent(new DemoEvent(user)); jdbcTemplate.update( "insert into t_user (`name`, `sex`, `age`) values (?, ?, ?)", user.getName(), user.getSex(), user.getAge()); log.info("事务中的业务逻辑执行完毕"); // 模拟业务异常 throw new RuntimeException(); }
再次调用DemoService的demo方法时,控制台只会输出
事务中的业务逻辑执行完毕
分类:
Spring
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)