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
}
}