组合环境仓库

在某些场景下,您可能希望从多个环境仓库中拉取配置数据。为此,您可以在配置服务器的 application properties 或 YAML 文件中启用 composite profile。例如,如果您想从一个 Subversion 仓库以及两个 Git 仓库中拉取配置数据,可以为配置服务器设置以下属性:

spring:
  profiles:
    active: composite
  cloud:
    config:
      server:
        composite:
        -
          type: svn
          uri: file:///path/to/svn/repo
        -
          type: git
          uri: file:///path/to/rex/git/repo
        -
          type: git
          uri: file:///path/to/walter/git/repo

使用此配置时,优先级由仓库在 composite 键下的列表顺序决定。在上述示例中,Subversion 仓库排在第一位,因此在 Subversion 仓库中找到的值将覆盖在任一 Git 仓库中为相同属性找到的值。在 rex Git 仓库中找到的值将优先于在 walter Git 仓库中为相同属性找到的值。

如果您只想从每种类型 distinct 的仓库中拉取配置数据,您可以在配置服务器的 application properties 或 YAML 文件中启用相应的 profile,而不是 composite profile。例如,如果您想从一个 Git 仓库和一个 HashiCorp Vault 服务器中拉取配置数据,您可以为配置服务器设置以下属性:

spring:
  profiles:
    active: git, vault
  cloud:
    config:
      server:
        git:
          uri: file:///path/to/git/repo
          order: 2
        vault:
          host: 127.0.0.1
          port: 8200
          order: 1

使用此配置时,优先级可以通过 order 属性确定。您可以使用 order 属性来指定所有仓库的优先级顺序。order 属性的数值越低,其优先级越高。仓库的优先级顺序有助于解决包含相同属性值的仓库之间任何潜在的冲突。

如果您的组合环境包含一个 Vault 服务器(如前一个示例所示),则必须在对配置服务器的每个请求中包含一个 Vault token。请参阅Vault 后端
从环境仓库检索值时发生的任何类型的失败都会导致整个组合环境失败。如果您希望即使仓库失败组合环境也能继续,可以将 spring.cloud.config.server.failOnCompositeError 设置为 false
使用组合环境时,重要的是所有仓库都包含相同的标签。如果您的环境类似于前述示例,并且您使用 master 标签请求配置数据,但 Subversion 仓库不包含名为 master 的分支,则整个请求将失败。

自定义组合环境仓库

除了使用 Spring Cloud 中的一个环境仓库外,您还可以提供自己的 EnvironmentRepository bean 作为组合环境的一部分包含进来。为此,您的 bean 必须实现 EnvironmentRepository 接口。如果您想控制自定义 EnvironmentRepository 在组合环境中的优先级,您还应该实现 Ordered 接口并覆盖 getOrdered 方法。如果您不实现 Ordered 接口,您的 EnvironmentRepository 将被赋予最低优先级。