跳到正文
Elaine Blog
返回

Spring Boot 启动与自动配置源码

Spring 生态与源码

阅读 Boot 启动源码时分两条线:SpringApplication.run 控制应用生命周期,自动配置导入决定额外 BeanDefinition。不要把所有启动日志看成一条调用栈。

Table of contents

Open Table of contents

从真实入口开始

SpringSourceLabApplication下载只保留主注解和 run

mvn package
java -jar target/spring-source-lab-1.0.0-SNAPSHOT.jar

SpringApplication.runprepareEnvironmentcreateApplicationContextrefreshContext 设置断点,记录事件和 Context 类型。

run 主线

创建 BootstrapContext
-> 准备 Environment
-> 创建并准备 ApplicationContext
-> refresh
-> 调用 Runner
-> 发布 ready 事件

失败分析器把常见启动异常转成可操作描述,但根因仍在 cause 链。启动耗时应按步骤测量,不能只看最终“Started in”。

自动配置如何发现

Boot 从自动配置元数据导入候选类,再让条件逐项判断。常用条件检查类、Bean、属性、资源和 Web 应用类型。未匹配配置不会创建 Bean,也不应产生副作用。

调试时启用条件评估报告,先找目标自动配置是否成为候选,再查看哪个条件不满足。直接复制网上的排除列表会掩盖依赖冲突。

配置绑定不是字符串复制

ConfigurationProperties Binder 需要处理松散命名、类型转换、集合、构造器绑定和校验。密钥不应输出到日志;缺少必需配置应在启动阶段失败并指出属性路径。

Boot 4.1.1 的官方依赖清单已把旧 spring-boot-starter-aop 改为 spring-boot-starter-aspectj。迁移时以官方 Starter 清单为准。

下一步

阅读Spring Boot 生产特性,把健康检查、指标、配置和优雅停机纳入交付标准。


分享这篇文章:

上一篇
手写 Spring Boot 核心流程
下一篇
Spring Boot 生产特性:健康检查、指标与优雅停机