一、概述
二、配置中心加载
三、应用配置加载
四、配置读取优先级
五、附录
1. 示例代码
SpringBoot 用更简便的方式构建 Spring 应用,SpringCloud 在此基础上,增加了许多分布式系统的组件和功能。
一、概述
SpringCloud 应用会创建一个 bootstrap 上下文容器,作为 SpringBoot 应用的父容器。父容器负责加载外部的配置属性(例如配置中心的配置),两个容器共用一个Environment
。
bootstrap 父容器和应用容器加载方式不一样,基于本地bootstrap.yml
而不是application.yml
配置文件,这样可以很好的隔离父容器配置和应用容器配置。
从配置中心加载指定应用的配置,需要指定spring.application.name
配置。
从配置中心加载指定 Profile 的配置,需要指定spring.profiles.active
配置。
上面配置应该在bootstrap.yml
中配置,而不是application.yml
,为了优先加载父容器的配置。
例如:bootstrap.yml
spring:
application:
name: sample
profiles:
active: dev
cloud:
config:
uri: ${SPRING_CONFIG_URI:http://localhost:8888}
可以在系统配置中使用spring.cloud.bootstrap.enabled=false
配置来禁用 bootstrap 流程。
二、配置中心加载
SpringCloud 默认在 Bootstrap 流程中从 Spring Cloud Config 服务器上加载外部配置,也支持从其他配置中心(Consul、Nacos 等)中加载。
配置中心客户端通过实现PropertySourceLocator
接口,来添加配置中心加载逻辑。
@Configuration
public class CustomPropertySourceLocator implements PropertySourceLocator {
@Override
public PropertySource<?> locate(Environment environment) {
Properties properties = new Properties();
// 加载配置中心的配置
return new PropertiesPropertySource("configServerProperties", properties);
}
}
然后在classpath
下创建/META-INF/spring.factories
文件,并配置下面内容。
# Bootstrap Configuration
org.springframework.cloud.bootstrap.BootstrapConfiguration=
cn.codeartist.springcloud.commons.locator.CustomPropertySourceLocator
三、应用配置加载
SpringCloud 应用会构建父子容器的上下文,bootstrap 父容器与应用容器是继承的关系,所以父容器会优先加载。
bootstrap 父容器中存在PropertySourceLocator
接口实现时,会最优先加载该接口导入的配置。
父容器上下文会基于boostrap.[properties | yml]
配置文件创建。
应用容器上下文在父容器创建完后,加载application.[properties | yml]
配置文件。
四、配置读取优先级
SpringCloud 应用和 Spring 一样会从多个地方读取配置,配置的默认优先级从高到低如下:
-
配置中心配置
-
JVM 系统属性 (
-D
指定的命令行参数) -
环境变量属性(操作系统环境变量)
-
application.[properties | yml]
-
boostrap.[properties | yml]
如果多个地方存在相同的配置,取优先级高的配置。
配置中心默认最高优先级,不能被本地配置覆盖,如果必须要覆盖,可以在配置中心添加下面配置。
spring:
cloud:
config:
allowOverride: true
overrideNone: true
overrideSystemProperties: false
注意:上述配置在本地配置无效,必须在配置中心配置。
五、附录
1. 示例代码
Gitee 仓库:
https://gitee.com/code_artist/springcloud
Github 仓库:
https://github.com/AiJiangnan/springcloud
原文始发于微信公众号(CodeArtist):SpringCloudContext上下文与配置
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/137975.html