
application.yml
和
bootstrap.yml
文件都是 Spring Boot 项目中用于配置应用程序的 YAML 或 Properties 文件,但它们在
加载顺序、用途和优先级
上存在关键的区别。
核心区别概览:
| 特性 | bootstrap.yml / bootstrap.properties | application.yml / application.properties |
|---|---|---|
| 加载时机 | 更早 (Bootstrap Context) | 较晚 (Application Context) |
| 用途 | 引导引导 (Bootstrapping) , 外部化配置 | 应用程序通用配置 |
| 上下文 | Bootstrap Context | Application Context |
| 优先级 | 更高 (在 Bootstrap Context 中) | 较低 (在 Application Context 中) |
| 配置来源 | 外部配置 (Config Server, Nacos, etc.) | 应用自身配置 (本地文件, 命令行, 环境变量) |
| 适用场景 | 配置中心连接、共享配置、应用名、Profile | 应用通用配置、Bean 定义、业务逻辑配置 |
| 配置覆盖 | application.yml 覆盖 bootstrap.yml | 命令行参数、环境变量等覆盖 application.yml |
| 默认位置 | src/main/resources/ | src/main/resources/ |
| 是否必须存在 | 可选 | 可选 (但通常存在) |
详细解释和区别:
1. 加载时机 (Loading Order):
bootstrap.yml
/
bootstrap.properties
(Bootstrap Context):
在 Spring Boot 应用程序启动的
非常早期
阶段加载。 这是通过
Bootstrap Context
实现的,它是一个特殊的父级 Spring 上下文,在主 Application Context 之前创建。application.yml
/
application.properties
(Application Context):
在
bootstrap.yml
加载之后,
在 Application Context 初始化时
加载。 这是 Spring Boot 应用的主上下文。理解 Bootstrap Context 和 Application Context:
你可以将 Bootstrap Context 理解为 Spring Boot 启动的 引导阶段 ,它负责初始化一些 基础且关键 的配置,例如:
spring.application.name
和
spring.profiles.active
等基础属性:
这些属性通常需要在 Bootstrap Context 中确定,以便后续的配置加载和应用初始化能够正确进行。Application Context 则是 Spring Boot 应用的
主应用上下文
,负责加载和管理应用程序中的所有 Bean、处理请求、执行业务逻辑等。
application.yml
主要用于配置应用程序自身的通用设置。
2. 用途 (Purpose):
bootstrap.yml
/
bootstrap.properties
: 引导引导 (Bootstrapping) 和 外部化配置:
spring.cloud.config.uri
或
spring.cloud.nacos.config.server-addr
等配置。sharedConfigs
):
使用 Spring Cloud Alibaba Nacos Config 的
sharedConfigs
功能时,需要在
bootstrap.yml
中配置。spring.application.name
):
通常在
bootstrap.yml
中设置,用于标识应用,方便配置中心识别。spring.profiles.active
):
在
bootstrap.yml
中激活 Profile,可以影响后续的配置加载。application.yml
/
application.properties
: 应用程序通用配置:
application.yml
中。3. 上下文 (Context):
bootstrap.yml
/
bootstrap.properties
: Bootstrap Contextapplication.yml
/
application.properties
: Application Context这意味着
bootstrap.yml
中的配置主要作用于 Bootstrap Context,而
application.yml
中的配置作用于 Application Context。 Bootstrap Context 的配置会影响 Application Context 的创建和初始化。
4. 优先级 (Priority):
bootstrap.yml
/
bootstrap.properties
的优先级更高 (在 Bootstrap Context 中):
Bootstrap Context 的配置会优先加载,并影响 Application Context 的创建。application.yml
/
application.properties
的优先级较低 (在 Application Context 中):
Application Context 的配置在 Bootstrap Context 之后加载。5. 配置来源 (Configuration Sources):
bootstrap.yml
/
bootstrap.properties
: 倾向于配置
外部配置来源**,例如 Spring Cloud Config Server, Nacos Config Server 等。 也用于配置一些需要在引导阶段就确定的
基础属性
。application.yml
/
application.properties
: 主要用于配置
应用自身**的配置,通常来源于本地文件系统、命令行参数、环境变量等。6. 适用场景 (Use Cases):
bootstrap.yml
/
bootstrap.properties
: 适用于:
sharedConfigs
(Nacos Config)。spring.application.name
和
spring.profiles.active
。application.yml
/
application.properties
: 适用于:
7. 配置覆盖 (Configuration Overriding):
application.yml
中的配置会覆盖
bootstrap.yml
中
相同属性的配置。 这是因为
application.yml
在
bootstrap.yml
之后加载。application.yml
和
bootstrap.yml
中的配置。 Spring Boot 的配置优先级顺序是:
application.yml
/
application.properties
(profile-specific 和 default)bootstrap.yml
/
bootstrap.properties
(profile-specific 和 default)8. 默认位置 (Default Location):
application.yml
和
bootstrap.yml
的默认位置都是
src/main/resources/
目录下。9. 是否必须存在 (Required or Optional):
application.yml
和
bootstrap.yml
都不是
必须
存在的。 Spring Boot 应用在没有这些配置文件的情况下也可以启动,它会使用默认配置。application.yml
(或
application.properties
) 通常是
必需
存在的。
bootstrap.yml
(或
bootstrap.properties
) 则在需要使用 Spring Cloud Config 或 Nacos Config 等外部化配置管理时才
常用
。总结:
application.yml
(或
application.properties
) 文件。
大部分应用程序的配置都放在
application.yml
中即可。bootstrap.yml
(或
bootstrap.properties
) 文件。
bootstrap.yml
主要用于配置引导阶段的配置,以及外部化配置的连接信息和共享配置。简单记忆口诀:
bootstrap.yml
先加载,
application.yml
后加载。bootstrap.yml
负责引导启动,
application.yml
负责应用配置。bootstrap.yml
配置外部配置,
application.yml
配置自身应用。