当前位置: 首页 > article >正文

Spring Boot 项目中application.yml 和 bootstrap.yml 文件的区别

application.ymlbootstrap.yml 文件都是 Spring Boot 项目中用于配置应用程序的 YAML 或 Properties 文件,但它们在加载顺序、用途和优先级上存在关键的区别。

核心区别概览:

特性bootstrap.yml / bootstrap.propertiesapplication.yml / application.properties
加载时机更早 (Bootstrap Context)较晚 (Application Context)
用途引导引导 (Bootstrapping), 外部化配置应用程序通用配置
上下文Bootstrap ContextApplication 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 Cloud Config Client 或 Nacos Config Client 的连接信息: Bootstrap Context 需要先知道如何连接配置中心,才能加载外部化配置。
  • 加载共享配置: 在多个应用之间共享的配置通常需要在 Bootstrap Context 中加载,以便在应用启动的早期阶段就可用。
  • 设置 spring.application.namespring.profiles.active 等基础属性: 这些属性通常需要在 Bootstrap Context 中确定,以便后续的配置加载和应用初始化能够正确进行。

Application Context 则是 Spring Boot 应用的主应用上下文,负责加载和管理应用程序中的所有 Bean、处理请求、执行业务逻辑等。 application.yml 主要用于配置应用程序自身的通用设置。

2. 用途 (Purpose):

  • bootstrap.yml / bootstrap.properties: 引导引导 (Bootstrapping) 和 外部化配置:
    • 配置 Spring Cloud Config Client 或 Nacos Config Client: 例如 spring.cloud.config.urispring.cloud.nacos.config.server-addr 等配置。
    • 加载共享配置 (sharedConfigs): 使用 Spring Cloud Alibaba Nacos Config 的 sharedConfigs 功能时,需要在 bootstrap.yml 中配置。
    • 配置应用程序名称 (spring.application.name): 通常在 bootstrap.yml 中设置,用于标识应用,方便配置中心识别。
    • 激活 Profile (spring.profiles.active):bootstrap.yml 中激活 Profile,可以影响后续的配置加载。
    • 其他需要在应用启动早期就加载的配置: 例如,一些自定义的 Bootstrap 监听器或初始化器需要的配置。
  • application.yml / application.properties: 应用程序通用配置:
    • 应用程序自身的通用配置: 例如,端口号、数据源连接信息 (如果不是共享的)、日志级别、国际化配置、Thymeleaf 模板配置、Spring MVC 配置、Bean 的定义等。
    • 业务逻辑相关的配置: 例如,一些业务开关、参数配置等。
    • 大部分应用程序的配置都应该放在 application.yml 中。

3. 上下文 (Context):

  • bootstrap.yml / bootstrap.properties: Bootstrap Context
  • application.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: 适用于:
    • 配置 Spring Cloud Config 或 Nacos Config Client 连接信息。
    • 配置 sharedConfigs (Nacos Config)。
    • 设置 spring.application.namespring.profiles.active
    • 配置需要在 Bootstrap Context 中使用的属性。
  • application.yml / application.properties: 适用于:
    • 配置应用程序的通用设置。
    • 定义 Bean。
    • 配置业务逻辑相关的参数。
    • 大部分应用程序的配置。

7. 配置覆盖 (Configuration Overriding):

  • application.yml 中的配置会覆盖 bootstrap.yml相同属性的配置。 这是因为 application.ymlbootstrap.yml 之后加载。
  • 命令行参数、环境变量等 可以进一步覆盖 application.ymlbootstrap.yml 中的配置。 Spring Boot 的配置优先级顺序是:
    1. 命令行参数
    2. 环境变量
    3. application.yml / application.properties (profile-specific 和 default)
    4. bootstrap.yml / bootstrap.properties (profile-specific 和 default)
    5. 默认配置 (Spring Boot 框架内部的默认值)

8. 默认位置 (Default Location):

  • application.ymlbootstrap.yml 的默认位置都是 src/main/resources/ 目录下。

9. 是否必须存在 (Required or Optional):

  • application.ymlbootstrap.yml 都不是必须存在的。 Spring Boot 应用在没有这些配置文件的情况下也可以启动,它会使用默认配置。
  • 然而,在实际开发中,为了进行各种自定义配置,application.yml (或 application.properties) 通常是必需存在的。 bootstrap.yml (或 bootstrap.properties) 则在需要使用 Spring Cloud Config 或 Nacos Config 等外部化配置管理时才常用

总结:

  • 如果你不需要使用 Spring Cloud Config 或 Nacos Config 等外部化配置管理,那么你可能只需要 application.yml (或 application.properties) 文件。 大部分应用程序的配置都放在 application.yml 中即可。
  • 如果你需要使用 Spring Cloud Config 或 Nacos Config 等外部化配置管理,或者需要在应用启动的早期阶段加载一些关键配置 (例如共享配置、应用名、Profile 等),那么你就需要使用 bootstrap.yml (或 bootstrap.properties) 文件。 bootstrap.yml 主要用于配置引导阶段的配置,以及外部化配置的连接信息和共享配置。

简单记忆口诀:

  • Bootstrap 先行,Application 后续: bootstrap.yml 先加载,application.yml 后加载。
  • Bootstrap 引导,Application 应用: bootstrap.yml 负责引导启动,application.yml 负责应用配置。
  • Bootstrap 外部,Application 自身: bootstrap.yml 配置外部配置,application.yml 配置自身应用。

http://www.kler.cn/a/583914.html

相关文章:

  • AISuite:一个新的开源Python库,提供了统一的跨LLM API
  • 深入解析:如何通过Spring Boot启动器无缝集成LangChain4j实现AI服务自动化
  • 轻量级嵌入式WebRTC开发:音视频通话EasyRTC纯C语言实现SFU/MCU架构与QoS优化
  • 浅谈时钟启动和Systemlnit函数
  • Vue3生态工具:Volar语言服务与Unplugin自动化导入配置
  • 算法每日一练 (11)
  • EngineerCMS完整版支持OnlyOffice8.2文档协作
  • 双 Token 无感刷新机制在前后端分离架构中实现
  • 实现图形界面访问无显示器服务器
  • Python网络爬虫之BeautifulSoup库的基本结构
  • Python :数据模型
  • 社交软件频繁更新,UI 设计在其中扮演什么角色?
  • ES 使用geo point 查询离目标地址最近的数据
  • Flutter 按钮组件 TextButton 详解
  • UFW 配置 Ubuntu 防火墙并设置防火墙规则
  • Spring Boot中引入Redis,以及RedisUtils完整工具类
  • 基于STM32F407ZGT6的硬件平台,(可选CubeMX) + PlatformIO软件开发的FreeRTOS部署指南
  • 什么是OF
  • 深入理解JavaScript构造函数与原型链:从原理到最佳实践
  • 《论语别裁》第01章 学而(24)五字串通五经