复合环境仓库

在某些场景下,您可能希望从多个环境仓库中拉取配置数据。为此,您可以在配置服务器的应用程序属性或 YAML 文件中启用 composite 配置文件。例如,如果您希望从 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 仓库中找到的相同属性的值之前使用。

如果您只想从每种类型都不同的仓库中拉取配置数据,您可以在配置服务器的应用程序属性或 YAML 文件中启用相应的配置文件,而不是 composite 配置文件。例如,如果您想从单个 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 令牌。请参阅 Vault 后端
从环境仓库检索值时发生的任何类型的故障都会导致整个复合环境失败。如果您希望即使在仓库失败时复合环境也能继续,可以将 spring.cloud.config.server.failOnCompositeError 设置为 false
使用复合环境时,所有仓库包含相同的标签非常重要。如果您有一个类似于前面示例中的环境,并且您请求带有 master 标签的配置数据,但 Subversion 仓库不包含名为 master 的分支,则整个请求将失败。

自定义复合环境仓库

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

© . This site is unofficial and not affiliated with VMware.