spring boot学习(3): SpringApplication 事件监听

spring application listener

spring 框架中,有多种事件, 这些时间会在不一样的运行时刻发布,来通知监听者。本文仅仅介绍 SpringApplicationEvent 的事件的监听。java

事件类型

EventType 发布时间
ApplicationContextInitializedEvent SpringApplication正在启动, ApplicationContext 已经准备好了,ApplicationContextInitializers 被调用, bean definitions 被加载以前
ApplicationStartingEvent 在一次启动以前发布
ApplicationEnvironmentPreparedEvent Environment 准备好以后,会有 context 去使用这一 Environment, 会在 context 建立以前发出
ApplicationPreparedEvent 会在 bean definitions 加载以后,refresh 以前发布
ApplicationStartedEvent context 更新以后,任何应用或命令行启动调用以前
ApplicationReadyEvent 任何应用或命令行启动调用以后发布,说明应用已经能够被请求了
ApplicationFailedEvent 启动发生有异常时发步

如何监听

  1. 监听器须要使用 org.springframework.context.ApplicationListener 这个接口的实例, 其声明以下:
@FunctionalInterface
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {
        /**
     * Handle an application event. * @param event the event to respond to
     */  
    void onApplicationEvent(E event);
}
  1. 须要使用 SpringApplication.addListeners(…​)SpringApplicationBuilder.listeners(…​) 来添加监听器。也能够在 META-INF/spring.factories 文件中配置:org.springframework.context.ApplicationListener=com.example.project.MyListener

例子:spring

public class StartingEventListener implements ApplicationListener<ApplicationStartingEvent> {
    @Override
    public void onApplicationEvent(ApplicationStartingEvent applicationStartingEvent) {
        System.out.println("called own starting listener");

        System.out.println(applicationStartingEvent.getClass());
    }
}
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args){
        SpringApplication application = new SpringApplication(DemoApplication.class);
        application.addListeners(new StartingEventListener());
        application.run(args);
    }
}

终端运行 jar 包:app

$ java -jar build/libs/springlisteners-0.0.1-SNAPSHOT.jar
called own starting listener
class org.springframework.boot.context.event.ApplicationStartingEvent

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.3.RELEASE)
相关文章
相关标签/搜索