在 Spring Boot 应用程序中,bootstrap.yml 和 application.yml 的区别主要体现在加载顺序、用途以及版本兼容性上,具体分析如下:
1. 加载顺序与上下文层级
-
bootstrap.yml- 加载时机更早:由父
ApplicationContext加载,优先于application.yml,主要用于应用程序的引导阶段。 - 用途:配置与外部系统连接的关键参数,例如 Spring Cloud Config Server 的地址、加密密钥等基础设施信息。
- 典型场景:在微服务架构中,通过
bootstrap.yml从远程配置中心获取实际配置(如数据库密码)。
- 加载时机更早:由父
-
application.yml- 加载时机较晚:由子
ApplicationContext加载,用于应用程序运行时的常规配置。 - 用途:定义应用自身的参数,如数据库连接、服务端口、日志级别等。
- 加载时机较晚:由子
2. 配置覆盖与优先级
-
旧版本(Spring Boot 2.4 之前)
bootstrap.yml的优先级高于application.yml,相同配置项以bootstrap.yml为准。- 例如,若两者均定义
spring.application.name,最终生效的是bootstrap.yml的值。
-
新版本(Spring Boot 2.4 及之后)
bootstrap.yml被弃用,其功能整合到application.yml中。- 需通过添加
spring-cloud-starter-bootstrap依赖显式启用bootstrap.yml,否则建议直接使用application.yml统一配置。
3. 典型使用场景对比
| 配置文件 | 典型配置内容 | 示例 |
|---|---|---|
bootstrap.yml | 外部配置中心地址、加密配置、Profile 激活设置、重试策略等 | spring.cloud.config.uri: [http://config-server:8888 ](http://config-server:8888 ) |
application.yml | 数据库连接、缓存配置、服务端口、业务逻辑参数等 | server.port: 8080 或 spring.datasource.url: jdbc:mysql://localhost |
4. 版本兼容性与注意事项
-
Spring Boot 2.4+ 的调整
- 默认不再支持
bootstrap.yml,需通过依赖或配置启用。 - Spring Cloud 2020.0.0(即 "Ilford")及之后版本,推荐将配置中心相关参数直接写入
application.yml。
- 默认不再支持
-
配置优先级冲突
- 若同时存在
application.yml和application.properties,后者会覆盖前者(同目录下)。 - 但
bootstrap.yml(旧版本)的优先级始终高于所有application配置文件。
- 若同时存在
5. 总结
-
核心区别:
bootstrap.yml用于引导阶段(如连接配置中心),application.yml用于运行时配置(如业务参数)。 -
版本影响:
新版本中两者界限模糊,建议根据 Spring Boot 和 Spring Cloud 的版本选择配置方式,优先使用application.yml。 -
动态配置:
application.yml支持通过 Spring Cloud Config 实现配置动态更新,而bootstrap.yml的配置通常较为静态。如果你喜欢我的文章,欢迎关注我的公众号“布道谷”。