Spring Boot ApplicationReadyEvent
ApplicationReadyEvent.class 是 Spring Boot 應用程序中的一個類文件,屬于 Spring 的事件監聽機制的一部分。下面我會詳細解釋它的作用、使用場景以及如何使用它。
一、ApplicationReadyEvent 是什么?
ApplicationReadyEvent 是 Spring Boot 提供的一個應用事件(Application Event),它在 Spring Boot 應用完全啟動并準備好接收請求時觸發。
這個事件是在 SpringApplication 啟動流程的最后階段發布的,表示:
- 所有的
ApplicationContext已經加載完成; - 所有的
CommandLineRunner和ApplicationRunner已經執行完畢; - 應用已經準備好處理請求。
官方文檔說明(簡化):
Event published as late as conceivably possible to indicate that the application is ready to service requests.
二、ApplicationReadyEvent 的繼承關系
public class ApplicationReadyEvent extends SpringApplicationEvent
繼承鏈如下:
ApplicationReadyEvent
└── SpringApplicationEvent
└── ApplicationEvent
└── EventObject
三、何時使用 ApplicationReadyEvent?
通常用于在 Spring Boot 應用啟動完成后執行一些初始化邏輯,例如:
- 初始化數據庫數據;
- 啟動定時任務;
- 發送系統啟動通知;
- 加載緩存;
- 啟動后臺線程等。
四、如何使用 ApplicationReadyEvent?
方法一:通過監聽器監聽事件
你可以通過監聽 ApplicationReadyEvent 來執行啟動后的邏輯。
示例代碼:
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
@Component
public class AppStartupRunner {
@EventListener(ApplicationReadyEvent.class)
public void onApplicationReady() {
System.out.println("Application is ready! You can start processing requests.");
// 在這里執行初始化邏輯
}
}
方法二:使用 CommandLineRunner 或 ApplicationRunner
雖然不是事件機制,但這兩個接口通常在 ApplicationReadyEvent 之前執行,也可以用于啟動后邏輯。
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class MyCommandLineRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("CommandLineRunner: Application started with arguments: " + String.join(", ", args));
}
}
五、與 ApplicationStartingEvent 和 ApplicationFailedEvent 的區別
| 事件名稱 | 觸發時機 |
|---|---|
ApplicationStartingEvent |
應用剛啟動,還沒創建上下文 |
ApplicationReadyEvent |
應用完全啟動,準備好接收請求 |
ApplicationFailedEvent |
應用啟動失敗時觸發 |
六、常見問題
1. ApplicationReadyEvent 和 @PostConstruct 的區別?
@PostConstruct是在 Bean 初始化階段調用的;ApplicationReadyEvent是在整個應用啟動完成后觸發的;- 如果你需要整個上下文準備好后再執行,建議使用事件。
2. 能否在 ApplicationReadyEvent 中注入其他 Bean?
可以,因為此時 Spring 上下文已經完全加載,你可以安全地注入任何 Bean。
七、總結
| 項目 | 說明 |
|---|---|
| 類名 | org.springframework.boot.context.event.ApplicationReadyEvent |
| 作用 | 應用完全啟動后觸發 |
| 使用方式 | 通過 @EventListener(ApplicationReadyEvent.class) 監聽 |
| 適合場景 | 啟動后初始化、通知、加載等操作 |
如果你有具體的使用場景或問題,可以告訴我,我可以提供更詳細的代碼示例或解決方案。
本文來自博客園,作者:chuangzhou,轉載請注明原文鏈接:http://www.rzrgm.cn/czzz/p/19000029

浙公網安備 33010602011771號