复合环境仓库
在某些场景下,你可能希望从多个环境仓库中拉取配置数据。为此,你可以在配置服务器的应用程序属性或 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 将被赋予最低优先级。