`

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

阅读更多

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

 

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

分享到:
评论

相关推荐

    使用Spring事件机制实现异步的方法

    在使用Spring事件机制实现异步的方法时,通常需要将事件监听器添加到ApplicationContext中。在上面的代码中,使用@SpringBootApplication的addListeners方法将MyListener添加到ApplicationContext中。 使用@Event...

    Spring的ApplicationEvent事件和监听器的测试Demo

    这些测试类通常会使用JUnit或Mockito等测试框架,确保事件机制按预期运行。 总的来说,这个测试Demo帮助开发者理解并实践Spring的事件发布和监听机制,它是Spring容器内组件间通信的一种有效方式,尤其适用于那些不...

    spring事件机制

    在Spring事件机制中,`ApplicationContext`扮演了事件总线的角色,它负责维护所有已注册的监听器,并在事件发布时分发事件给这些监听器。这种设计模式使得Spring应用的组件间通信更加灵活,同时也降低了组件之间的...

    深入探索Spring事件监听机制:技术与应用

    在Spring中,事件监听机制由三部分组成:事件(ApplicationEvent)、事件监听器(ApplicationListener)和事件广播器(ApplicationEventMulticaster)。接下来我们将深入探讨这些概念以及如何在实际应用中使用它们。...

    event.rar-Spring事件监听机制

    默认情况下,事件传播是同步的,这意味着发布事件的线程会等待所有监听器处理完事件后再继续执行。不过,可以通过自定义`ApplicationEventMulticaster`来改变这种行为。 6. **事件类型与多态** Spring的事件系统...

    spring的Applicationcontext对事件的监听,实现类似MQ的效果

    当你有一个需要传播的消息或事件时,你可以创建一个继承自`ApplicationEvent`的自定义事件类。 创建自定义事件类的示例如下: ```java public class MyCustomEvent extends ApplicationEvent { private String ...

    SpringEventTest工程

    当你需要触发一个事件时,通常会创建一个继承自`ApplicationEvent`的自定义事件类,包含具体的业务数据。 3. **ApplicationListener接口** `ApplicationListener`接口是Spring事件监听器的接口,实现该接口的类...

    详解JAVA Spring 中的事件机制

    在 Spring 中,事件机制的实现主要依赖于 ApplicationEvent 和 ApplicationListener 两个接口。ApplicationEvent 是一个抽象的事件类,它是所有事件的父类。ApplicationListener 是一个接口,它定义了事件发生时的回...

    Springboot事件监听源码

    默认实现是`SimpleApplicationEventMulticaster`,它使用一个`ConcurrentHashMap`来存储监听器,并通过迭代监听器列表来广播事件。 在`SimpleApplicationEventMulticaster`的`multicastEvent`方法中,可以看到事件...

    详解Spring事件驱动模型

    Spring默认使用`SimpleApplicationEventMulticaster`,它维护了一个监听器列表,当`multicastEvent`方法被调用时,会遍历列表并调用每个监听器的`onApplicationEvent`方法。 3. `ApplicationContext`:它是Spring的...

    SpringBoot事件发布及订阅详解含代码示例(值得珍藏)

    通过以上内容,我们可以了解到SpringBoot的事件发布和订阅机制,包括ApplicationEvent的创建和发布、ApplicationListener的实现以及@EventListener的使用。这使得我们在开发过程中能够实现松耦合的事件驱动编程,...

    spring 时间机制

    然而,由于`onApplicationEvent`方法会响应所有类型的`ApplicationEvent`,所以在实现时需要检查传入事件的类型,以确保只处理关心的事件,如下所示: ```java @Component public class CustomEventListener ...

    详解SpringBoot 发布ApplicationEventPublisher和监听ApplicationEvent事件

    在Spring Boot应用中,`ApplicationEventPublisher`和`ApplicationEvent`是Spring框架提供的一种轻量级事件驱动模型,用于在应用程序内部实现松耦合的通信。这种机制允许一个组件在执行某些操作后通知其他组件,而...

    spring中监听事件

    当你有一个特定业务逻辑完成后需要通知其他组件时,可以创建自定义的事件类,继承自`ApplicationEvent`。 事件的发布过程通常由`ApplicationContext`接口的`publishEvent`方法完成。当调用此方法时,Spring会查找...

    springboot项目.pdf

    事件监听机制可以通过继承 ApplicationEvent 抽象类来实现。 事件监听机制可以分为三个步骤: * 自定义事件:继承 ApplicationEvent 抽象类,用于定义事件。 * 定义事件监听器:有多种实现方式,用于监听事件。 * ...

    springboot.zip

    这确保了事件监听器在处理事件时使用的是我们自定义的异步线程池,而不是默认的同步执行。 总结来说,SpringBoot的`ApplicationEventPublisher`和`ApplicationEvent`机制提供了事件驱动编程的能力,允许组件之间以...

    11 spring IoC容器中事件event消息的发送和接收内部工作原理揭秘慕课专栏1

    下面是一个简单的Spring事件使用示例: - 定义自定义事件类`MyEvent`继承`ApplicationEvent` - 创建消息发送者`MyEvenPublisherBean`,它使用`getApplicationEventMulticaster().addApplicationListener(listener)`...

    日志通过ApplicationEvent、Annotation、MQ实现公用逻辑

    当系统中发生某个重要事件时,可以通过创建并发布`ApplicationEvent`来通知其他关注此事件的组件。在日志记录场景中,我们可以定义自定义的事件类型,如`LogRecordingEvent`,每当需要记录日志时,就触发这个事件。...

    springBoot的事件机制GenericApplicationListener用法解析

    在 Spring Boot 中,事件机制是基于 ApplicationEvent 的。ApplicationEvent 是一个抽象类,里面只有一个构造函数和一个长整型的时间戳。Spring Boot 中的事件类型有多种,包括 ApplicationStartingEvent、...

    Spring事件Application Event原理详解

    Spring 事件 Application Event 是 Spring 框架中的一种消息通信机制,用于实现 Bean 之间的消息传递。该机制基于观察者模式,允许一个 Bean 处理完一个任务之后,通知其他 Bean 进行相应的处理。 自定义事件 ...

Global site tag (gtag.js) - Google Analytics