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