`

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

阅读更多

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

 

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

分享到:
评论

相关推荐

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

    Spring的ApplicationEvent事件和监听器的测试工程,演示了如何使用Spring中的事件和监听器内容。完整的maven工程,能够运行。

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

    这种机制基于观察者模式,由事件(ApplicationEvent)、事件监听器(ApplicationListener)和事件广播器(ApplicationEventMulticaster)三个主要组成部分构成。 事件是发生的动作或事情,其核心是ApplicationEvent...

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

    当某个特定的事件发生时,ApplicationEvent 对象会被创建并发布到 ApplicationContext 中,所有注册监听该事件的监听器就会收到通知并执行相应的操作。 ApplicationEvent 是一个泛型类,可以用来传递任何类型的数据...

    Java Spring框架面试题大全

    Spring使用ApplicationEvent和ApplicationListener两个核心接口实现了事件监听机制。开发者可以自定义事件类和事件监听器,并通过应用程序上下文的publishEvent方法来发布事件,Spring框架会自动分发事件给所有对该...

    SpringEventTest工程

    Spring的ApplicationEvent事件和监听器的测试工程,演示了如何使用Spring中的事件和监听器内容。

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

    主要介绍了详解SpringBoot 发布ApplicationEventPublisher和监听ApplicationEvent事件,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    applicationEvent实战demo

    用户需要通过邮箱验证码来登录,直接的做法无非是直接在项目中的登录服务里调用邮件服务,通过应用ApplicationEvent可以对这样一个调用解耦,改为在登录服务中发布一个邮箱登录事件,Listener监听后发送邮件。

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

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

    Spring活动

    事件-默认情况下-是同步的。 这具有一些优点-例如,侦听器能够参与发布者的交易环境。 @TransactionalEventListener批注是@EventListener的扩展,它允许将事件的侦听器绑定到事务的某个阶段。 可以绑定到以下事务...

    delphi ApplicationEvents使用说明及源码实例

    delphi ApplicationEvents用法和源码实例,在delphi程序中, 当在一个窗口上放置一个ApplicationEvents控件时,Application将会把所有的事件都转寄到ApplicationEvents; ApplicationEvents是用来捕获程序级事件的,也...

    03-05-12-ApacheDubbo服务发布源码分析1

    1.ApplicationEvent:表示事件本身,自定义事件需要继承该类 2.ApplicationEventPublisherAware:事件发送器,需要实

    Spring事件Application Event原理详解

    主要介绍了Spring 事件Application Event原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    java8集合源码分析-JavaDemo:我的Java演示

    需要继承ApplicationEvent 监听器【处理事件】MessageEventListener 需要实现ApplicationListener<事件源> 异步 需要监听器方法加@Async 主类@EnableAsync mongodb的使用示例 很多小的用例目前包括: 锁 线程 另...

    springboot.zip

    SpringBoot 中发布ApplicationEventPublisher,监听ApplicationEvent 异步线程池操作

    Java中介者模式实现类库组件Java版MediatR

    内容:中介者模式、观察者模式/监听者模式实现,用来消息发送和消息处理的解耦,以单播和多播形式同步或异步的模式发布消息,创建和帧听事件。 能学到:ApplicationContext、ApplicationEvent、ApplicationListener...

    spring-resource:spring resouce code learn(Spring源码学习)

    太复杂的功能记录大概流程, 一些重要点注释实现细节和补充一些使用的例子spring 源码阅读记录IOCAOPMVCSpringMVC源码分析spring 实战设计模式结合spring的策略模式结合spring的管道模式特性实践spring事件机制-...

    springboot学习思维笔记.xmind

    使用容器发布事件 Spring高级话题 Spring Aware BeanNameAware BeanFactoryAware ApplicationContextAware MessageSourceAware ApplicationEventPublisherAware ResourceLoaderAware 多...

    观察者模式java实现观察者设计模式

    java实现观察者设计模式,利用ApplicationListener和ApplicationEvent。Test包里有测试代码

    AppleJavaExtensions-1.4

    import com.apple.eawt.Application; import com.apple.eawt.ApplicationAdapter; import com.apple.eawt.ApplicationEvent;

    SPRING API 2.0.CHM

    ApplicationEvent ApplicationEventMulticaster ApplicationEventPublisher ApplicationEventPublisherAware ApplicationListener ApplicationObjectSupport ArgPreparedStatementSetter ...

Global site tag (gtag.js) - Google Analytics