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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值