最近做的收银自助机项目中,在自助机实际使用的时候扫描的商品多了会感觉程序执行很慢,于是就开始分析找原因,因为我们的商品库中的商品实际上是没有商品的,当用户扫描完商品进行下单核验的时候会将商品数据传至后台,后台会将我们自己商品库中没有的商品存储到我们的商品库中,存储没有的商品的时候使用到了spring 提供的ApplicationEvent事件处理功能,该功能其实就是观察者模式的实现,当我们执行一个比较耗时而并不关键的操作(比如上报监控信息什么的),如果同步执行必然是没有意义的,因此一般我们会想去异步处理,通常会使用MQ之类的中间件,不过Spring也提供了事件相关的处理,就是ApplicationEven,不过有一个问题需要注意的是,默认这种事件机制是同步的,好处是如果有事务,发送事件的方法和事件处理的方法在同一个事务里,缺点就是,可能并没有实现我们想象中的异步处理,有一种方案是在处理事件的时候使用一个线程池,通过线程池来异步处理,虽然是解决了异步的问题,但是给笔者一种脱裤子放屁的赶脚,与其这样,还不如直接扔到一个线程池里,何必还走一个事件处理?好在Spring本身也支持ApplicationEvent的异步处理,通过@Async注解就可以了。在监听器方法onApplicationEvent(ApplicationEvent event)前加一个@Async注解即可。
具体可参考:https://blog.csdn.net/thekenofDIS/article/details/79893301
相关推荐
默认情况下,事件传播是同步的,这意味着发布事件的线程会等待所有监听器处理完事件后再继续执行。不过,可以通过自定义`ApplicationEventMulticaster`来改变这种行为。 6. **事件类型与多态** Spring的事件系统...
这确保了事件监听器在处理事件时使用的是我们自定义的异步线程池,而不是默认的同步执行。 总结来说,SpringBoot的`ApplicationEventPublisher`和`ApplicationEvent`机制提供了事件驱动编程的能力,允许组件之间以...
如果你需要同步处理,可以在事件监听器方法上添加`@Async`注解。 7. **自定义事件总线** 如果需要更复杂的事件系统,如事务管理、事件过滤或自定义调度,你可以创建一个自定义的`ApplicationEventMulticaster`并...
Spring提供了一个事件发布机制,允许组件之间通过ApplicationEvent和ApplicationListener进行通信。 【FileSystemResource和ClassPathResource】 FileSystemResource代表文件系统中的资源,而ClassPathResource代表...
- 但这种方式会使bean与Spring框架耦合,因此在使用时需谨慎考虑。 #### 第三章:创建切面 15. **面向切面编程(AOP)简介** - AOP是Spring框架中的一个重要特性,用于实现横切关注点的分离。 - 通过定义切面,...