1. 引言
Spring Boot 以其“開箱即用”的特性深受開發者喜愛,但隨著項目復雜度的增加,應用的啟動時間也可能會變得較長。對于云原生、Serverless 等場景而言,快速啟動是一個非常關鍵的指標。
2. 分析啟動過程
2.1 啟動階段概述
Spring Boot 的啟動流程主要包括以下幾個階段:
- 初始化
SpringApplication
- 推斷 Web 應用類型(WebFlux、Servlet、非 Web)
- 加載所有
ApplicationContextInitializer
和ApplicationListener
- 推斷主類
- 構建并刷新
ApplicationContext
- 執行
CommandLineRunner
/ApplicationRunner
2.2 使用監聽器進行性能分析
你可以通過自定義 ApplicationListener
來記錄各個階段的耗時情況:
@Component
public class StartupTimeLogger implements ApplicationListener<ApplicationReadyEvent> {private static final Logger log = LoggerFactory.getLogger(StartupTimeLogger.class);private long startTime;@EventListener(ApplicationStartingEvent.class)public void onApplicationStart() {startTime = System.currentTimeMillis();}@Overridepublic void onApplicationEvent(ApplicationReadyEvent event) {long duration = System.currentTimeMillis() - startTime;log.info("Application started in {} ms", duration);}
}
2.3 使用 --debug
查看自動配置報告
運行時加上 --de