跳到主要内容
版本:5.0.1

环境仓库

DeepSeek V3 中英对照 Environment Repository

Config Server 的配置数据应存储在哪里?控制此行为的策略是 EnvironmentRepository,它提供 Environment 对象。这个 Environment 是 Spring Environment 领域的一个浅拷贝(主要特性包括 propertySources)。Environment 资源由三个变量参数化:

  • {application},对应客户端的 spring.application.name。

  • {profile},对应客户端的 spring.profiles.active(以逗号分隔的列表)。

  • {label},是服务器端用于标记一组“版本化”配置文件的标签。

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

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

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

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

如果仓库是基于文件的,服务器会从 application.yml(在所有客户端之间共享)和 foo.yml(其中 foo.yml 具有优先权)创建一个 Environment。如果 YAML 文件内部包含指向 Spring 配置文件的文档,这些文档将按更高的优先级应用(按照配置文件中列出的顺序)。如果有特定于配置文件的 YAML(或属性)文件,这些文件也比默认文件具有更高的优先级。更高的优先级意味着 PropertySource 在 Environment 中列出的位置更靠前。(这些相同的规则适用于独立的 Spring Boot 应用程序。)

你可以将 spring.cloud.config.server.accept-empty 设置为 false,这样当应用未找到时,服务器将返回 HTTP 404 状态码。默认情况下,该标志设置为 true。

备注

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

章节总结​

📄️Git 后端

EnvironmentRepository 的默认实现使用 Git 后端,这对于管理升级、物理环境以及审计变更非常方便。要更改存储库的位置,你可以在 Config Server 中设置 spring.cloud.config.server.git.uri 配置属性(例如在 application.yml 中)。如果使用 file: 前缀进行设置,它应该能够从本地存储库工作,这样你就可以快速轻松地开始,无需服务器。然而,在这种情况下,服务器直接操作本地存储库而无需克隆它(即使它不是裸存储库也没关系,因为 Config Server 永远不会对“远程”存储库进行更改)。为了扩展 Config Server 并使其高可用,你需要让服务器的所有实例都指向同一个存储库,因此只有共享文件系统才能工作。即使在这种情况下,对于共享文件系统存储库,最好使用 ssh: 协议,这样服务器可以克隆它并使用本地工作副本作为缓存。

📄️通过代理访问后端

配置服务器可以通过 HTTP 或 HTTPS 代理访问 Git 或 Vault 后端。此行为通过 proxy.http 和 proxy.https 下的设置分别控制 Git 或 Vault 的代理行为。这些设置是针对每个仓库的,因此如果您使用的是复合环境仓库,则必须单独为复合仓库中的每个后端配置代理设置。如果网络要求为 HTTP 和 HTTPS URL 使用不同的代理服务器,您可以为单个后端同时配置 HTTP 和 HTTPS 代理设置:在这种情况下,HTTP 访问将使用 HTTP 代理,HTTPS 访问将使用 HTTPS 代理。此外,您还可以指定一个单独的代理,该代理将用于应用程序和代理之间使用代理定义协议的所有协议。