时间:2020-12-18 02:22:23 | 栏目:JAVA代码 | 点击:次
前言
本文主要给大家介绍了关于Spring Boot应用事件监听的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧
1. Spring Boot特有的应用事件
除了Spring框架的事件,Spring Boot的SpringApplication也发送了一些自己的事件:
有些事件是在ApplicationContext创建之前触发的,所以我们不能用常规的注册成bean的事件监听方式:
像ApplicationStartedEvent和ApplicationReadyEvent是ApplicationContext创建之后触发的,可以用上述两种方式来监听事件。
2. 如何监听这些事件
我们可以通过下面的方式注册监听:
2.1. SpringApplication.addListeners(...)
SpringApplication application = new SpringApplication(StartEventsApplication.class);
application.addListeners(
(ApplicationListener<ApplicationStartingEvent>) event -> log.info("----------- 监听Spring Boot:" + event.getClass().getSimpleName()),
(ApplicationListener<ApplicationEnvironmentPreparedEvent>) event -> log.info("----------- 监听Spring Boot:" + event.getClass().getSimpleName()),
(ApplicationListener<ApplicationContextInitializedEvent>) event -> log.info("----------- 监听Spring Boot:" + event.getClass().getSimpleName()),
(ApplicationListener<ApplicationPreparedEvent>) event -> log.info("----------- 监听Spring Boot:" + event.getClass().getSimpleName()),
(ApplicationListener<ApplicationStartedEvent>) event -> log.info("----------- 监听Spring Boot:" + event.getClass().getSimpleName()),
(ApplicationListener<ApplicationReadyEvent>) event -> log.info("----------- 监听Spring Boot:" + event.getClass().getSimpleName())
);
application.run(args);
2.2. SpringApplicationBuilder.listeners(...)
new SpringApplicationBuilder()
.sources(StartEventsApplication.class)
.listeners(
(ApplicationListener<ApplicationStartingEvent>) event -> log.info("----------- 监听Spring Boot:" + event.getClass().getSimpleName()),
(ApplicationListener<ApplicationEnvironmentPreparedEvent>) event -> log.info("----------- 监听Spring Boot:" + event.getClass().getSimpleName()),
(ApplicationListener<ApplicationContextInitializedEvent>) event -> log.info("----------- 监听Spring Boot:" + event.getClass().getSimpleName()),
(ApplicationListener<ApplicationPreparedEvent>) event -> log.info("----------- 监听Spring Boot:" + event.getClass().getSimpleName()),
(ApplicationListener<ApplicationStartedEvent>) event -> log.info("----------- 监听Spring Boot:" + event.getClass().getSimpleName()),
(ApplicationListener<ApplicationReadyEvent>) event -> log.info("----------- 监听Spring Boot:" + event.getClass().getSimpleName())
)
.run(args);
2.3. META-INF/spring.factories
src/main/resources/META-INF/spring.factories:
org.springframework.context.ApplicationListener=top.wisely.startevents.listeners.ApplicationContextInitializedEventListener, \
top.wisely.startevents.listeners.ApplicationEnvironmentPreparedEventListener, \
top.wisely.startevents.listeners.ApplicationPreparedEventListener, \
top.wisely.startevents.listeners.ApplicationReadyEventListener, \
top.wisely.startevents.listeners.ApplicationStartedEventListener, \
top.wisely.startevents.listeners.ApplicationStartingEventListener
监听器只需实现ApplicationListener<要监听的接口类型>接口,无需手动注册为bean:
public class ApplicationStartedEventListener implements ApplicationListener<ApplicationStartedEvent> {
@Override
public void onApplicationEvent(ApplicationStartedEvent event) {
log.info("----------- 监听Spring Boot:" + event.getClass().getSimpleName());
}
}
3. 源码地址
https://github.com/wiselyman/spring-boot-application-events.git (本地下载)
总结