官方文档相关介绍:https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#boot-features-application-events-and-listeners 本文记录springboot使用@EventListener监听事件、ApplicationEventPublisher.publishEvent发布事件实现业务解耦。 代码 项目结构 默认情况下,事件的发布和监听操作是同步执行的,...
这样一来,发现被观察者又简洁了很多,但是后来我发现,在SpringBoot项目里,利用Spring事件驱动驱动模型(event)模型来实现,更加地简练。 Spring Event实现发布/订阅模式 Spring Event对发布/订阅模式进行了封装,使用起来更加简单,还是以我们这个场景为例,看看怎么来实现吧。 自定义事件 PlaceOrderEvent:继承ApplicationEvent,...
spring boot publishEvent 异步执行 在使用spring的时候,我们经常会用到application.publishEvent()的方式来达到解耦合的目的,但是spring默认配置是同步的方式调用,在spring boot中如果需要异步执行的,配置如下: package hello; import java.util.concurrent.Executor; import org.springframework.boot.SpringApplication; impo...
在需要更新user对象的地方,调用UserUpdatePublisher的publishEvent()方法。 示例代码如下: // UserUpdateEvent.javapublicclassUserUpdateEvent{privateUser user;publicUserUpdateEvent(User user){this.user = user;}publicUsergetUser(){returnuser;}}// UserUpdatePublisher.java@ComponentpublicclassUserUpdatePublisher{...
SpringBoot:Event实现发布/订阅模式 不管是否基于spring boot 的发布订阅模型,最终都是开启了线程执行任务,和使用第三方的MQ消息组件,问题在于重启服务器或者未知原因崩溃的时候,消息的恢复机制要自行处理。 如图所示支付业务中,用户支付成功之后,后续还有很多的业务流程,但是对于用户来讲是透明的,所以为了提高接口的响应...
2.ApplicationEnvironmentPreparedEvent 当已获取的了所有Spring Context上下文信息 但是此时还没有进行创建 此时Spring Boot开始启动 EventPublishingRunListener会发送ApplicationEnvironmentPreparedEvent事件 告诉Spring Boot应用环境已经准备就绪 准备做后续处理 监听此事件的监听器是ConfigFileApplicationListener ...
spring_event.jpg 几个组件顾名思义,不多赘述. 对应的接口: 事件:ApplicationEvent 事件发布器:ApplicationEventPublisher 事件监听器:ApplicationListener 事件广播器:ApplicationEventMulticaster 在Spring Boot Application的启动代码中, 核心方法:refreshContext(), 这里完成了Spring Context个各种组件初始化: ...
如下所示,楼主定义的Event类叫做UserActionEvent。 EnumUserOperate 枚举类 三、事件类定义好了,我们去定义操作发布:ApplicationEventPublisher,快点跟上别掉队了。 我是在UserServiceImpl中进行事件发布的,如下: 发布者会调用 ApplicationEventPublisher的publishEvent 方法对某一事件进行发布。随后Spring容器会把该事件告诉所...
发布者会调用 ApplicationEventPublisher的publishEvent 方法对某一事件进行发布。随后Spring容器会把该事件告诉所有的监听者(我的“女神”有动态了),监听者根据拿到的“信息、某些指令或者某些数据”去做一些业务上的操作。 这个模式常常会与设计模式中观察者模式进行对比。举个栗子:上课铃响了,老师和同学听到铃声后,都...
publisher.publishEvent(new PersonSaveEvent<>(1)); } //监听事件 @EventListener public void listenEvent(PersonSaveEventevent) { System.out.println("监听到PersonSaveEvent事件; 接收到的值:" + event.getData() + ";发布的时间为" + Instant.ofEpochMilli(event.getTimestamp())); ...