ApplicationStartingEvent
触发时机:在 Spring Boot 应用程序开始启动时,在任何处理(除了监听器和初始化器注册)之前触发。
用途:这是应用启动的最早阶段,通常用于执行一些非常早期的初始化操作,比如记录启动日志、加载全局配置等。
ApplicationEnvironmentPreparedEvent
触发时机:在 Spring 应用程序上下文创建之前,当 Environment (应用程序环境配置,包含属性源、配置文件等信息)准备好之后触发。
用途:可以在这个阶段对 Environment 进行修改,例如添加额外的属性源、修改配置属性等。
ApplicationContextInitializedEvent
触发时机:在 ApplicationContext (Spring 应用程序上下文)被创建并初始化之后,但在加载任何 bean 定义之前触发。
用途:可以在这个阶段对 ApplicationContext 进行一些自定义配置,比如注册自定义的 BeanFactoryPostProcessor 或 BeanPostProcessor。
ApplicationPreparedEvent
触发时机:在 ApplicationContext 已经加载了所有的 bean 定义,但在刷新(refresh)之前触发。
用途:可以在这个阶段对 ApplicationContext 中的 bean 进行最后的修改或检查,例如修改 bean 的定义、添加额外的 bean 等。
ApplicationStartedEvent
触发时机:在 ApplicationContext 刷新(refresh)完成之后,但在 CommandLineRunner 和 ApplicationRunner 执行之前触发。
用途:可以在这个阶段执行一些应用程序启动后但在业务逻辑执行之前的操作,比如初始化一些外部服务的连接、启动后台任务等。
ApplicationReadyEvent
触发时机:在 CommandLineRunner 和 ApplicationRunner 执行完成之后触发,表示应用程序已经准备好接收请求。
用途:可以在这个阶段执行一些通知操作,比如向监控系统发送应用启动成功的消息、打印启动完成的日志等。
ApplicationFailedEvent
触发时机:当应用程序启动过程中发生异常导致启动失败时触发。
用途:可以在这个阶段执行一些异常处理和清理操作,比如记录错误日志、关闭已经打开的资源等。
在主函数中这样写
public static void main(String[] args) {
SpringApplication application = new SpringApplication(StockPool2Application.class);
application.addListeners(new ApplicationListener<ApplicationStartedEvent>() {
@Override
public void onApplicationEvent(ApplicationStartedEvent event) {
logger.info("程序正常启动");
}
});
application.run(args);
}
配置一个 监听类
@Component
public class CustomApplicationListener implements ApplicationListener<ApplicationReadyEvent> {
@Override
public void onApplicationEvent(ApplicationReadyEvent event) {
System.out.println("ApplicationReadyEvent: Application is ready
}
}