跳到主要内容

复合环境仓库

DeepSeek V3 中英对照 Composite Environment Repositories

在某些场景下,您可能希望从多个环境仓库中拉取配置数据。为此,您可以在配置服务器的应用程序属性或 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
yaml

使用此配置时,优先级由在 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
yaml

使用此配置时,可以通过 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 将被赋予最低的优先级。