Spring Boot 中application.yml与bootstrap.yml的区别 深入理解SpringCloud之引导程序应用上下文

SpringBoot默认支持properties(.properties)和YAML(.yml .yaml )两种格式的配置文件

1.加载顺序

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

bootstrap.yml 用于应用程序上下文的引导阶段。bootstrap.yml 由父Spring ApplicationContext加载。

父ApplicationContext 被加载到使用 application.yml 的之前。

如果resource里面同时有application.propertiesapplication.yml,且存在相同的配置,则application.properties会覆盖application.yml里面的属性,因为application.properties 会后加载,也就是说哪个文件被最后加载,哪个才具有最高级。(application会覆盖bootstrap中的非引导配置)

2.配置区别

bootstrap.yml 和application.yml 都可以用来配置参数。

bootstrap.yml 用来程序引导时执行,应用于更加早期配置信息读取. 可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。

application.yml 可以用来定义应用级别的, 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等.如果加载的application.yml的内容标签与bootstrap的标签一致,application会覆盖bootstrap, 而application.yml 里面的内容可以动态替换。

3. 典型的应用场景如下:

  • 当使用 Spring Cloud Config Server 的时候,你应该在 bootstrap.yml 里面指定 spring.application.name 和 spring.cloud.config.server.git.uri
  • 和一些加密/解密的信息

官网文档地址:https://cloud.spring.io/spring-cloud-static/Dalston.SR5/single/spring-cloud.html#_the_bootstrap_application_context

为何需要把 config server 的信息放在 bootstrap.yml 里?

当使用 Spring Cloud 的时候,配置信息一般是从 config server 加载的,为了取得配置信息(比如密码等),你需要一些提早的或引导配置。因此,把 config server 信息放在 bootstrap.yml,用来加载真正需要的配置信息。