1. 事件和监听器
1.1 监听器-SpringApplicationRunListener
自定义SpringApplicationRunListener来的视线类来监听事件。在META-INF/spring.factories 中配置 org.springframework.boot.SpringApplicationRunListener=自己的Listener,还可以指定一个有参构造器,接受两个参数(SpringApplication application, String[] args)

1.2 事件触发时机
1.2.1 各种回调监听器
- BootstrapRegistryInitializer感知引导初始化。
META-INF/spring.factories创建引导上下文bootstrapContext的时候触发 - ApplicationContextInitializer:在IOC容器的初始化的时候
- ApplicationListener:会感知全阶段基于事件机制,感知事件。 一旦到了哪个阶段可以做别的事
- SpringApplicationRunListener感知全阶段生命周期 + 各种阶段都能自定义操作; 功能更完善
- ApplicationRunner感知应用就绪Ready。卡死应用,就不会就绪
- CommandLineRunner感知应用就绪Ready。卡死应用,就不会就绪
如果想要在项目启动前做一个事情可以使用BootstrapRegistryInitializer和ApplicationContextInitializer的监听。如果想要在项目启动完成后做事可以使用ApplicationRunner和CommandLineRunner。干涉生命周期可以使用SpringApplicationRunListener
2. 九大事件完整的触发流程
ApplicationStartingEvent:应用启动但未做任何事情, 除过注册listeners and initializers.ApplicationEnvironmentPreparedEvent: Environment 准备好,但context 未创建.ApplicationContextInitializedEvent: ApplicationContext 准备好,ApplicationContextInitializers 调用,但是任何bean未加载ApplicationPreparedEvent: 容器刷新之前,bean定义信息加载ApplicationStartedEvent: 容器刷新完成, runner未调用AvailabilityChangeEvent:LivenessState.CORRECT应用存活; 存活探针ApplicationReadyEvent: 任何runner被调用AvailabilityChangeEvent:ReadinessState.ACCEPTING_TRAFFIC就绪探针,可以接请求ApplicationFailedEvent:启动出错

评论区