springboot应用程序中配置文件bootstrap.yml和application.yml有什么区别

736 阅读2分钟

在 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 的配置通常较为静态。

    如果你喜欢我的文章,欢迎关注我的公众号“布道谷”。

qrcode_for_gh_323a6e79d595_258.jpg