Spring Boot应用事件监听

栏目: Java · 发布时间: 6年前

内容简介:除了Spring框架的事件,Spring Boot的有些事件是在像

1. Spring Boot特有的应用事件

除了Spring框架的事件,Spring Boot的 SpringApplication 也发送了一些自己的事件:

  1. ApplicationStartingEvent :在任何处理(除了注册 listenerinitializer )开始之前发送。
  2. ApplicationEnvironmentPreparedEvent : 在 context 创建之前,而用到 context 中的 Environment 已经被识别时发送。
  3. ApplicationContextInitializedEventSpringApplication 正在启动, ApplicationContext 已准备好且 ApplicationContextInitializer 已被调用但是bean的定义还没有被加载时发送。
  4. ApplicationPreparedEvent : 在 context 刷新之前,在bean的定义已经被加载之后调用。
  5. ApplicationStartedEvent : 在任何应用和 command-line runner 调用之前,而 context 已经被刷新时发送。
  6. ApplicationReadyEvent : 在任何应用和 command-line runner 被调用的时候发送,它意味着应用可以接受请求了。
  7. ApplicationFailedEvent : 在启动时有异常的时候发送。

有些事件是在 ApplicationContext 创建之前触发的,所以我们不能用常规的注册成bean的事件监听方式:

@EventListener
ApplicationListener<Event>

ApplicationStartedEventApplicationReadyEventApplicationContext 创建之后触发的,可以用上述两种方式来监听事件。

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应用事件监听》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Cyberwar

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》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

html转js在线工具
html转js在线工具

html转js在线工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具