环境仓库

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.ymlfoo.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 中。这些属性在应用初始化时使用。