侧边栏壁纸
博主头像
程序员の小站博主等级

行动起来,活在当下

  • 累计撰写 51 篇文章
  • 累计创建 35 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

SpringBoot的事件和监听器

Administrator
2025-01-20 / 0 评论 / 0 点赞 / 2 阅读 / 3891 字
温馨提示:
本文最后更新于 2025-01-20,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1. 事件和监听器

1.1 监听器-SpringApplicationRunListener

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

1.2 事件触发时机

1.2.1 各种回调监听器

  • BootstrapRegistryInitializer感知引导初始化。META-INF/spring.factories创建引导上下文bootstrapContext的时候触发
  • ApplicationContextInitializer:在IOC容器的初始化的时候
  • ApplicationListener:会感知全阶段基于事件机制,感知事件。 一旦到了哪个阶段可以做别的事
  • SpringApplicationRunListener感知全阶段生命周期 + 各种阶段都能自定义操作; 功能更完善
  • ApplicationRunner感知应用就绪Ready。卡死应用,就不会就绪
  • CommandLineRunner感知应用就绪Ready。卡死应用,就不会就绪

如果想要在项目启动前做一个事情可以使用BootstrapRegistryInitializerApplicationContextInitializer的监听。如果想要在项目启动完成后做事可以使用ApplicationRunnerCommandLineRunner。干涉生命周期可以使用SpringApplicationRunListener

2. 九大事件完整的触发流程

  1. ApplicationStartingEvent:应用启动但未做任何事情, 除过注册listeners and initializers.
  2. ApplicationEnvironmentPreparedEvent: Environment 准备好,但context 未创建.
  3. ApplicationContextInitializedEvent: ApplicationContext 准备好,ApplicationContextInitializers 调用,但是任何bean未加载
  4. ApplicationPreparedEvent: 容器刷新之前,bean定义信息加载
  5. ApplicationStartedEvent: 容器刷新完成, runner未调用
  6. AvailabilityChangeEventLivenessState.CORRECT应用存活; 存活探针
  7. ApplicationReadyEvent: 任何runner被调用
  8. AvailabilityChangeEventReadinessState.ACCEPTING_TRAFFIC就绪探针,可以接请求
  9. ApplicationFailedEvent :启动出错

image.png

0

评论区