application.yml和bootstrap.yml这两个配置文件有什么区别?

application.ymlbootstrap.yml 是 Spring Boot / Spring Cloud 项目中常见的两种配置文件,它们的主要区别在于加载时机、用途和作用范围。

bootstrap.yml 是 Spring Cloud 的特性,不是 Spring Boot 本身的特性。application.yml 是 Spring Boot 的特性。所以,如果是纯 Spring Boot 应用,则不会加载bootstrap.yml

一、加载顺序不同

  • bootstrap.yml(或 bootstrap.properties):

    • 在 Spring 应用上下文启动之前加载。优先级 高于 application.yml
  • application.yml(或 application.properties):

    • 在 Spring 应用上下文创建过程中加载。
    • 是 Spring Boot 默认的主配置文件。

bootstrap 翻译过来就是 "引导程序"、"启动程序",所以,以他命名的文件要最先开始做加载。

二、使用场景不同

bootstrap.yml 主要用于初始化 Spring Cloud 相关的配置(如配置中心、加密解密等)。常见的就是如果你的 Spring 应用需要接入配置中心,比如 nacos,那么 nacos 相关的配置就需要放在 bootstrap.yml 中。

bootstrap.yml 典型使用场景:

  • 使用 Spring Cloud Config Server 获取远程配置
  • 使用 Spring Cloud Vault 管理敏感信息
  • 使用 Nacos / Consul / Zookeeper 作为配置中心

application.yml 用来配置普通的应用配置信息,如数据库连接、端口、日志级别等,还有一些业务相关配置项等。

三、bootstrap.yml 默认不开启

需要注意的是,在较新版本的 Spring Boot 2.4+ 及其后续 Spring Cloud 版本中,它的默认支持被移除,并引入了spring.config.import机制来替代旧的 Bootstrap 上下文加载方式,推荐将配置转移到 application.yml,或者通过添加 spring-cloud-starter-bootstrap 依赖来恢复支持。

主要变化是配置中心(如 Nacos、Apollo)的加载方式从 bootstrap.yml 的特殊处理转变为通过 spring.config.import 属性导入,使得配置更加统一。

这么做的原因:

  • 简化启动流程:Bootstrap 上下文增加了复杂性和启动时间。
  • 推动更现代的配置方式:如 Nacos、Consul、Config Server 现在支持通过 application.yml 直接配置,无需 bootstrap。
  • 减少 "魔法" 行为:避免开发者困惑为啥某些配置在 bootstrap.yml 才生效。
相关推荐
北斗落凡尘4 分钟前
LangGraph 入门实战(7)
后端·langchain
uzong19 分钟前
业务新老系统数据迁移-负责人经验总结和复盘
后端
dogstarhuang42 分钟前
大模型 API 停服怎么办:用 API 网关实现多模型统一接入与可切换架构
人工智能·后端·架构·大模型·api·数字化转型·ai应用
程序猿DD1 小时前
OctaFuse Gateway 2.5.0:接入 Responses 端点、更易理解的路由配置
后端·agent
nnerddboy3 小时前
Rust教程04:引用、借用与切片
开发语言·后端·rust
Rain的Java大神之路3 小时前
线上接口负载满了如何解决
java·数据库·redis·后端·缓存·面试·架构
weixin_431600444 小时前
NestJS 入门(7):生命周期钩子——构造函数和 `OnModuleInit` 差在哪?
前端·后端·学习·node.js·nest.js
小强库计算机毕业设计5 小时前
基于 Spring Boot + Vue3 的校园管理系统
java·spring boot·后端·项目实战·管理系统·技术分享·校园管理系统实战
canonical_entropy5 小时前
关于《Mission Driver:Loop Engineering 的一种通用参考实现》的补充说明
后端·agent·ai编程
__zRainy__5 小时前
Node系列 · Node基础:Node.js 概述
后端·node.js