跳到主要内容

环境仓库

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
yaml

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

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

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

备注

你不能将 spring.main.* 属性放在远程的 EnvironmentRepository 中。这些属性在应用程序初始化时使用。

章节总结

📄️ Git 后端

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

📄️ 通过代理访问后端

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