SpringBoot:配置文件(bootstrap与application)

12/31/2023 SpringBoot

目录


参考:


# 配置文件加载顺序

  • Spring Boot 默认支持 properties(.properties) 和 YAML(.yml .yaml ) 格式的配置文件。
  • 创建 SpringBoot 项目时,一般的配置文件放置在代码中 resources 目录下。
  • 配置文件加载顺序:bootstrap.yaml->application.yaml->[若设置了运行环境配置,例:application-dev.yaml]。
  • 如果同一目录下,有 application.yml 也有 application.properties ,默认先读取 application.properties
  • 如果同一个配置属性,在多个配置文件都配置了,默认使用第1个读取到的,后面读取的不覆盖前面读取到的。

以 jar 包发布 SpringBoot 项目时,默认会先使用 jar 包根目录下的 application.properties 来作为项目配置文件。

如果 jar 包根目录下存在不同目录的多个配置文件,则读取顺序依次如下:

  1. config/application.properties( jar 包根目录中 config 目录下)
  2. config/application.yml
  3. application.properties( jar 包根目录下)
  4. application.yml
  5. resources/config/application.properties( jar 包代码中 resources 目录中 config 目录下)
  6. resources/config/application.yml
  7. resources/application.properties( jar 包代码中 resources 目录下)
  8. resources/application.yml

# 配置文件的区别:bootstrap.yml 与 application.yml

加载顺序:

若 bootstrap.yml 和 application.yml 在同一目录下:bootstrap.yml 先加载 application.yml 后加载。

配置区别:

  • bootstrap.yml 用于程序上下文的引导阶段,是应用程序更加早期读取。程序启动上下文时,会创建一个 BootstrapContext,作为 Spring 应用上下文 ApplicationContext 的父上下文。初始化的时候,BootstrapContext 负责加载配置文件属性并解析。配置信息是系统级别的参数,一般是不会变动的。
  • application.yml 用于定义程序应用级别的、应用特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。

属性覆盖问题:

  • bootstrap 与 application 存在相同的配置项时,application 会覆盖 bootstrap。
  • application 里面的内容可以动态替换,如搭配 spring-cloud-config 使用时可实现动态替换。

bootstrap.yml应用场景:

  • 配置固定不变的属性。

  • 配置加密/解密场景的属性。

  • 配置连接外部配置中心的属性来加载外部配置中心的配置信息:例如:当使用 Spring Cloud Config Server (或者Spring Cloud Alibaba Nacos)配置中心时,这时必须将 spring.application.name 和 spring.cloud.config.server.git.uri(或者spring.cloud.nacos.config)配置在 bootstrap.yml 配置文件中,添加连接到配置中心的配置属性来加载外部配置中心的配置信息。

上次更新时间: 9/25/2024, 9:17:45 AM