内容简介:除了Spring框架的事件,Spring Boot的有些事件是在像
1. Spring Boot特有的应用事件
除了Spring框架的事件,Spring Boot的 SpringApplication
也发送了一些自己的事件:
-
ApplicationStartingEvent
:在任何处理(除了注册listener
和initializer
)开始之前发送。 -
ApplicationEnvironmentPreparedEvent
: 在context
创建之前,而用到context
中的Environment
已经被识别时发送。 -
ApplicationContextInitializedEvent
:SpringApplication
正在启动,ApplicationContext
已准备好且ApplicationContextInitializer
已被调用但是bean的定义还没有被加载时发送。 -
ApplicationPreparedEvent
: 在context
刷新之前,在bean的定义已经被加载之后调用。 -
ApplicationStartedEvent
: 在任何应用和command-line runner
调用之前,而context
已经被刷新时发送。 -
ApplicationReadyEvent
: 在任何应用和command-line runner
被调用的时候发送,它意味着应用可以接受请求了。 -
ApplicationFailedEvent
: 在启动时有异常的时候发送。
有些事件是在 ApplicationContext
创建之前触发的,所以我们不能用常规的注册成bean的事件监听方式:
@EventListener ApplicationListener<Event>
像 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(...)
src/main/resources/META-INF/spring.factories
下:
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
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()); } }
以上所述就是小编给大家介绍的《Spring Boot应用事件监听》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Laravel 给生产环境添加监听事件 - SQL日志监听
- Flutter事件监听
- Vue简便监听事件
- react源码-事件监听
- Flutter 监听生命周期事件
- springboot~ EventListener事件监听的使用
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Cyberwar
Kathleen Hall Jamieson / Oxford University Press / 2018-10-3 / USD 16.96
The question of how Donald Trump won the 2016 election looms over his presidency. In particular, were the 78,000 voters who gave him an Electoral College victory affected by the Russian trolls and hac......一起来看看 《Cyberwar》 这本书的介绍吧!