使用@TransactionalEventListener结合@Async在事务提交之后异步进行Event的处理

转载

分类专栏: Java

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.****.net/ly199108171231/article/details/94717538

        Spring的发布订阅模型实际上并不是异步的,而是同步的来将代码进行解耦。而TransactionEventListener仍是通过这种方式,只不过加入了回调的方式来解决,这样就能够在事务进行Commited,Rollback...等的时候才会去进行Event的处理。

       实际上通过TransactionSynchronizationManager.registerSynchronization是通过手动的来注册回调也可以实现类似功能。这里我们重点看第一种。直接上代码:

1、写一个监听事件实体

使用@TransactionalEventListener结合@Async在事务提交之后异步进行Event的处理

2、写一个注解:使用@TransactionalEventListener结合@Async在事务提交之后异步进行Event的处理

3、实现一个切面,并在切入点进行事件发布

使用@TransactionalEventListener结合@Async在事务提交之后异步进行Event的处理

4、监听处理器

使用@TransactionalEventListener结合@Async在事务提交之后异步进行Event的处理

说明:

@TransactionalEventListener注解是需要在事务内发布的事件才可以被监听到,该注解的phase值有四个枚举,默认就是AFTER_COMMIT,其他三个值BEFORE_COMMIT,AFTER_ROLLBACK,AFTER_COMPLETION。