Environment Repository

你应该在哪里存储 Config Server 的配置数据?治理此行为的策略是 EnvironmentRepository,它提供 Environment 对象。此 Environment 是来自 Spring Environment 的域的浅表副本(包括 propertySource 作为主要功能)。Environment 资源由三个变量参数化:

  • {application},它映射到客户端侧 spring.application.name

  • {profile},它映射到客户端侧 spring.profiles.active(以逗号分隔的列表)。

  • {label},它是表示一组“版本化”配置文件的服务器端功能。

存储库实现通常像 Spring Boot 应用程序一样,从等于 {application} 参数的 spring.config.name 和等于 {profiles} 参数的 spring.profiles.active 加载配置文件。配置文件的优先级规则也与常规 Spring Boot 应用程序中的相同:活动配置文件优先于默认配置文件,并且如果存在多个配置文件,则最后一个配置文件优先(类似于向 Map 添加条目)。

以下示例客户端应用程序具有此引导配置:

spring:
  application:
    name: foo
  profiles:
    active: dev,mysql

(与 Spring Boot 应用程序一样,这些属性也可以通过环境变量或命令行参数设置)。

如果存储库是基于文件的,则服务器将从 application.yml(由所有客户端共享)和 foo.yml(优先使用 foo.yml)创建一个 Environment。如果 YAML 文件内部有指向 Spring 配置文件的文档,则会以更高的优先级(按照列出的配置文件的顺序)应用这些文档。如果有特定配置文件的 YAML(或属性)文件,那么它们也会以高于默认优先级的优先级应用。更高的优先级表示在 Environment 中更早列出的 PropertySource。(这些相同的规则适用于独立 Spring Boot 应用程序。)

你可以将 spring.cloud.config.server.accept-empty 设置为 false,以便在找不到应用程序时,服务器返回 HTTP 404 状态。默认情况下,此标志设置为 true

您不能将 spring.main.* 属性放置在远程 EnvironmentRepository 中。这些属性用作应用程序初始化的一部分。