欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ApplicationEvent使用时注意默认的事件机制是同步的

程序员文章站 2022-07-15 14:36:27
...

最近做的收银自助机项目中,在自助机实际使用的时候扫描的商品多了会感觉程序执行很慢,于是就开始分析找原因,因为我们的商品库中的商品实际上是没有商品的,当用户扫描完商品进行下单核验的时候会将商品数据传至后台,后台会将我们自己商品库中没有的商品存储到我们的商品库中,存储没有的商品的时候使用到了spring 提供的ApplicationEvent事件处理功能,该功能其实就是观察者模式的实现,当我们执行一个比较耗时而并不关键的操作(比如上报监控信息什么的),如果同步执行必然是没有意义的,因此一般我们会想去异步处理,通常会使用MQ之类的中间件,不过Spring也提供了事件相关的处理,就是ApplicationEven,不过有一个问题需要注意的是,默认这种事件机制是同步的,好处是如果有事务,发送事件的方法和事件处理的方法在同一个事务里,缺点就是,可能并没有实现我们想象中的异步处理,有一种方案是在处理事件的时候使用一个线程池,通过线程池来异步处理,虽然是解决了异步的问题,但是给笔者一种脱裤子放屁的赶脚,与其这样,还不如直接扔到一个线程池里,何必还走一个事件处理?好在Spring本身也支持ApplicationEvent的异步处理,通过@Async注解就可以了。在监听器方法onApplicationEvent(ApplicationEvent event)前加一个@Async注解即可。

 

具体可参考:https://blog.csdn.net/thekenofDIS/article/details/79893301

相关标签: spring