官方文档解释

SpringCloud 官方文档关于 38. Spring Cloud Context 的介绍

bootstrap怎么配置到spring boot中_加载

翻译:Spring Boot 对于如何使用 Spring 构建应用有自己的见解。例如,它具有用于公共配置文件的约定的位置(resources 目录),并具有用于公共管理和监视任务的端点。Spring Cloud 在此基础上构建,并添加了一些系统中很多组件会用到或者偶尔需要的特性。

bootstrap怎么配置到spring boot中_加载_02

翻译:一个 Spring Cloud 应用通过创建一个 ”bootstrap“ 上下文来运行,它是主应用的父上下文。此上下文负责从外部源加载配置属性,并对本地外部配置文件中的属性进行解密。这两个上下文(parent context,main application context)共享一个 Environment,它是任何 Spring 应用的外部属性源。默认情况下,bootstrap properties(不是 bootstrap.properties 但是 properties 是在 bootstrap 阶段加载的)以高优先级添加,因此他们不能被本地配置(例如:resources 目录下的配置文件中的配置)重写。

bootstrap怎么配置到spring boot中_加载_03

翻译:引导上下文与主应用上下文使用不同的约定来加载外部配置。使用 bootstrap.yml 替换 application.ymlapplication.properties,保持bootstrap 和 main 上下文很好的分开。下面是一个例子:

// 这是一段加载 `Spring Cloud Config` 分布式配置中心的配置

spring:
  application:
    name: foo
  cloud:
    config:
      uri: ${SPRING_CONFIG_URI:http://localhost:8888}

bootstrap怎么配置到spring boot中_bootstrap_04

翻译:如果你的应用需要任何来自服务器的任何特定于应用的配置,你应该设置一个 spring.application.name 。如果要将属性 spring.application.name 作为应用的上下文ID,就必须设置在 bootstrap.yml|properties 中。
如果你想要加载特定环境的配置,也需要设置 spring.profiles.activebootstrap.yml|properties
你也可以完全禁用 bootstrap 进程通过设置 spring.cloud.bootstrap.enabled=false (例如在程序启动参数中)

更多关于 Spring Cloud Context 的细节可以查看官方文档

总结

通过上面官方文档的解释,我们知道了以下几点:

  1. bootstrap contextmain application context 公用一个 Environment,它是任何 Spring 应用的外部属性来源
  2. bootstrap 里面的属性会 优先加载,且不能被本地配置重写
  3. bootstrap.yml|propertiesapplication.yml|properties 都可以用来配置属性,可以同时存在
  4. bootstrap.yml|properties 一般用于 Spring Cloud 应用、配置不能覆盖的场景、配置加解密场景