官方文档解释
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 应用、配置不能覆盖的场景、配置加解密场景