阅读 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.run、prepareEnvironment、createApplicationContext、refreshContext 设置断点,记录事件和 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 生产特性,把健康检查、指标、配置和优雅停机纳入交付标准。