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