sc-config:进阶应用之配置多个 repo

296 阅读3分钟

这是我参与更文挑战的第 16 天,活动详情查看: 更文挑战

《配置中心 Spring Cloud Config 详解》系列文章更新,一起在技术的路上精进!本系列文章将会介绍Spring Cloud 中提供了分布式配置中心Spring Cloud Config。应用服务中除了实现系统功能的代码,还需要连接资源和其它应用,经常有很多需要在外部配置的数据去调整应用的行为,如切换不同的数据库,设置功能开关等。随着微服务的不断增加,需要系统具备可伸缩和可扩展性,除此之外就是管理相当多的服务实例的配置数据。在应用的开发阶段由各个服务自治,但是到了生产环境之后会给运维带来很大的麻烦,特别是微服务的规模比较大,配置的更新更为麻烦。为此,系统需要建立一个统一的配置管理中心。

在前面的文章,我们主要介绍了 Spring Cloud Config 客户端和服务端相关实现细节。

Spring Cloud Config 的基础应用主要包括三大元素:

  • 配置服务器
  • 配置客户端
  • 配置仓库

实现了 config client 启动时,根据配置的规则,先从 config Server 拉取其对应的配置信息,然后才会初始化 config client 的上下文环境。另外还补充了配置的动态刷新和 webHook 应用于配置刷新。

其他的功能如模式匹配和对 repo、配置仓库的加密解密、属性覆盖、SVN 配置(本地)仓库、安全保护等功能,本文开始将会重点讲述进阶的功能。

首先来看看如何为 config Server 配置多个 repo。

为config Server配置多个repo

之前的例子中,我们配置 config server 的 git repo 信息如下:

spring.cloud.config.server.git.uri: https://gitee.com/keets/Config-Repo.git

它也支持更复杂的需求,通过应用名 application 与 profile 进行模式匹配。模式格式是带有通配符的{application}/{profile}名称的逗号分隔列表(其中可能需要引用以通配符开头的模式)。

repo中的pattern属性是一个数组,因此可以使用一个YAML数组来绑定多个patterns。当我们想要运行应用的多个profiles时,需要这样做。Spring Cloud将会猜测,当一个pattern包含一个不以*结尾的profile,暗示了你实际是想要匹配以该pattern开头的profiles。这很正常,比如我们可能需要在本地运行development的profile,然而在远端运行cloud的profile。

默认情况下,config server只有配置在第一次请求时才会从远端clone。config server可以设置成,在启动时从远端仓库clone。

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          repos:
			  simple: https://github.com/simple/config-repo          
            development:
              pattern:
                - '*/development'
                - '*/staging'
              uri: https://github.com/development/config-repo
            staging:
              pattern: staging*
              cloneOnStart: true
              uri: https://github.com/staging/config-repo

如上的配置方式,repos配置了多个仓库:simple、development和staging,通过三个不同的repos配置方式,讲解多个repos的模式匹配。

  • simple仓库:匹配的模式是simple/*,意为只匹配应用名为simple的所有profiles。simple中使用的快捷配置方式,只能用于设置URI的地址,如要设置其他信息(credentials或模式等),则必须要使用完整的形式。
  • development仓库:*/staging["*/staging", "*/staging,*"]的简写,匹配staging开头的profile的应用。同理,*/development匹配所有以development开头的profile的应用。
  • staging:pattern对应于staging*,staging repo匹配了所有的以staging开头应用名,并且不限profile。/*后缀会自动添加到没有profile匹配的任何模式。并开启了config Server即clone该仓库到本地。

小结

本文主要介绍了 Spring Cloud Config 服务端 config Server 配置多个 repo。我们根据不同的环境,配置不同的环境和仓库,可以将生产的仓库和开发测试的仓库进行分离。下面的文章,我们将继续学习 Spring Cloud Config 相关的进阶应用。