生命周期监听
自定义 SpringApplicationRunListener
来监听事件
- 编写
SpringApplicationRunListener
实现类 - 在
META-INF/spring-factories
中配置org.springframework.boot.SpringApplicationRunListener=自己的 Listener
, 还可以指定一个有参构造器 springboot
在spring-boot.jar
中配置了默认的 Listener :EventPublishingRunListener
java
/**
* springboot 生命周期监听
*
* Listener 先要从 MATE-INF/spring.factories 读到
*
* 1、 引导: 利用 BootstrapContext 引导整个项目启动
* starting : 应用开始,SpringApplication 的 run 方法一调用,只要有了 BootstrapContext 就执行
* environmentPrepared : 环境准备好(把启动参数等绑定到环境变量中),但是 IOC 还没有创建
* 2、启动:
* contextPrepared: IOC 容器创建并准备好,但是 sources(主配置类)没加载。并关闭引导上下文
* contextLoaded: IOC 容器加载,主配置类加载进去了。但是 IOC 容器还没刷新 (bean 未创建到 IOC 容器内)
* ========= 截止之前,IOC 容器里面还没有造 bean =====
* started: IOC 容器刷新(bean 已经造好),但还没有调用 runner
* ready: 所有的 runner 都执行完,并且 IOC 容器也刷新完成
*
* 3、运行
* 如果以上步骤失败就会调用 failed
*/
public class MyAppListener implements SpringApplicationRunListener {
@Override
public void environmentPrepared(ConfigurableBootstrapContext bootstrapContext, ConfigurableEnvironment environment) {
System.out.println("==========environmentPrepared 环境准备完成==========");
}
@Override
public void contextPrepared(ConfigurableApplicationContext context) {
System.out.println("==========contextPrepared IOC容器准备完成==========");
}
@Override
public void starting(ConfigurableBootstrapContext bootstrapContext) {
System.out.println("==========starting 正在启动==========");
}
@Override
public void contextLoaded(ConfigurableApplicationContext context) {
System.out.println("=========contextLoaded IOC容器加载完成==================");
}
@Override
public void started(ConfigurableApplicationContext context, Duration timeTaken) {
System.out.println("========started 应用启动完成 =====================");
}
@Override
public void ready(ConfigurableApplicationContext context, Duration timeTaken) {
System.out.println("=========ready 应用准备就绪 ==========");
}
@Override
public void failed(ConfigurableApplicationContext context, Throwable exception) {
System.out.println("=============failed 应用启动失败=======================");
}
}