环境仓库
Config Server 的配置数据应该存储在哪里?管理这种行为的策略是 EnvironmentRepository
,它提供 Environment
对象。这个 Environment
是 Spring Environment
领域(包括 propertySources
作为主要特性)的浅层副本。Environment
资源通过三个变量进行参数化:
-
{application}
,它映射客户端的spring.application.name
。 -
{profile}
,它映射客户端的spring.profiles.active
(逗号分隔列表)。 -
{label}
,这是服务器端的一个功能,用于标记“版本化”的配置文件集。
仓库实现通常像一个 Spring Boot 应用一样运行,从与 {application}
参数同名的 spring.config.name
以及与 {profiles}
参数同名的 spring.profiles.active
中加载配置文件。Profile 的优先级规则也与常规 Spring Boot 应用中的规则相同:激活的 profile 优先于默认设置,如果存在多个 profile,最后一个生效(类似于向 Map
中添加条目)。
以下示例客户端应用具有此 bootstrap 配置
spring:
application:
name: foo
profiles:
active: dev,mysql
(与常规 Spring Boot 应用一样,这些属性也可以通过环境变量或命令行参数设置)。
如果仓库是基于文件的,服务器会从 application.yml
(所有客户端共享)和 foo.yml
(foo.yml
优先级更高)创建 Environment
。如果 YAML 文件内部包含指向 Spring profile 的文档,则这些 profile 会以更高的优先级应用(按照列出的 profile 顺序)。如果存在特定于 profile 的 YAML(或属性)文件,它们的优先级也高于默认文件。优先级更高意味着在 Environment
中更早列出 PropertySource
。(这些规则也适用于独立的 Spring Boot 应用。)
你可以将 spring.cloud.config.server.accept-empty
设置为 false
,这样如果找不到应用,服务器将返回 HTTP 404 状态。默认情况下,此标志设置为 true
。
你不能将 spring.main.* 属性放在远程 EnvironmentRepository 中。这些属性在应用初始化时使用。 |