SpringCloudContext上下文与配置

  一、概述

    二、配置中心加载

    三、应用配置加载

    四、配置读取优先级

    五、附录

        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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值