组合环境资源库

在某些情况下,您可能希望从多个环境资源库中提取配置数据。为此,您可以在配置服务器的应用程序属性或 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`将获得最低优先级。