SpringBoot:配置文件(bootstrap与application)
accttodo 12/31/2023 SpringBoot
目录
参考:
- 链接1:https://blog.csdn.net/wounler/article/details/123853070 (opens new window)
- 链接2:https://blog.csdn.net/weixin_43931625/article/details/103628375 (opens new window)
# 配置文件加载顺序
- 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 包根目录下存在不同目录的多个配置文件,则读取顺序依次如下:
- config/application.properties( jar 包根目录中 config 目录下)
- config/application.yml
- application.properties( jar 包根目录下)
- application.yml
- resources/config/application.properties( jar 包代码中 resources 目录中 config 目录下)
- resources/config/application.yml
- resources/application.properties( jar 包代码中 resources 目录下)
- 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 配置文件中,添加连接到配置中心的配置属性来加载外部配置中心的配置信息。