SpringCloud 官方文档关于 38. Spring Cloud Context 的介绍
翻译:Spring Boot 对于如何使用 Spring 构建应用有自己的见解。例如,它具有用于公共配置文件的约定的位置(resources 目录),并具有用于公共管理和监视任务的端点。Spring Cloud 在此基础上构建,并添加了一些系统中很多组件会用到或者偶尔需要的特性。
翻译:一个 Spring Cloud 应用通过创建一个 ”bootstrap“ 上下文来运行,它是主应用的父上下文。此上下文负责从外部源加载配置属性,并对本地外部配置文件中的属性进行解密。这两个上下文(parent context,main application context)共享一个 Environment,它是任何 Spring 应用的外部属性源。默认情况下,bootstrap properties(不是 bootstrap.properties 但是 properties 是在 bootstrap 阶段加载的)以高优先级添加,因此他们不能被本地配置(例如:resources 目录下的配置文件中的配置)重写。
翻译:引导上下文与主应用上下文使用不同的约定来加载外部配置。使用 bootstrap.yml 替换 application.yml 或 application.properties,保持bootstrap 和 main 上下文很好的分开。下面是一个例子:
// 这是一段加载 `Spring Cloud Config` 分布式配置中心的配置
spring:
application:
name: foo
cloud:
config:
uri: ${SPRING_CONFIG_URI:http://localhost:8888}
翻译:如果你的应用需要任何来自服务器的任何特定于应用的配置,你应该设置一个 spring.application.name 。如果要将属性 spring.application.name 作为应用的上下文ID,就必须设置在 bootstrap.yml|properties 中。
如果你想要加载特定环境的配置,也需要设置 spring.profiles.active 在 bootstrap.yml|properties 中
你也可以完全禁用 bootstrap 进程通过设置 spring.cloud.bootstrap.enabled=false (例如在程序启动参数中)
更多关于 Spring Cloud Context 的细节可以查看官方文档
总结通过上面官方文档的解释,我们知道了以下几点:
- bootstrap context 和 main application context 公用一个 Environment,它是任何 Spring 应用的外部属性来源
- bootstrap 里面的属性会 优先加载,且不能被本地配置重写
- bootstrap.yml|properties 和 application.yml|properties 都可以用来配置属性,可以同时存在
- bootstrap.yml|properties 一般用于 Spring Cloud 应用、配置不能覆盖的场景、配置加解密场景



