跳到主要内容
版本:5.0.1

Spring Cloud Config Server

DeepSeek V3 中英对照 Spring Cloud Config Server

Spring Cloud Config Server 提供了一个基于 HTTP 资源的 API,用于外部配置(键值对或等效的 YAML 内容)。通过使用 @EnableConfigServer 注解,该服务器可以嵌入到 Spring Boot 应用程序中。因此,以下应用程序就是一个配置服务器:

@SpringBootApplication
@EnableConfigServer
public class ConfigServer {
public static void main(String[] args) {
SpringApplication.run(ConfigServer.class, args);
}
}

与所有 Spring Boot 应用一样,它默认在 8080 端口上运行,但您可以通过多种方式将其切换到更常规的 8888 端口。最简单的方法(同时设置默认配置仓库)是使用 spring.config.name=configserver 启动它(Config Server jar 包中有一个 configserver.yml 文件)。另一种方法是使用您自己的 application.properties,如下例所示:

server.port: 8888
spring.cloud.config.server.git.uri: file://${user.home}/config-repo

其中 ${user.home}/config-repo 是一个包含 YAML 和 properties 文件的 git 仓库。

备注

在 Windows 上,如果文件 URL 是带有驱动器前缀的绝对路径(例如,[/$\{user.home}/config-repo](file:///$%7Buser.home%7D/config-repo)),则需要在文件 URL 中额外添加一个 "/"。

提示

以下清单展示了创建前述示例中 git 仓库的步骤:

$ cd $HOME
$ mkdir config-repo
$ cd config-repo
$ git init .
$ echo info.foo: bar > application.properties
$ git add -A .
$ git commit -m "Add application.properties"
注意

仅用于测试目的时,才使用本地文件系统作为你的 git 仓库。在生产环境中,你应该使用服务器来托管你的配置仓库。

注意

如果您的配置仓库中仅保留文本文件,初始克隆可以快速高效。如果您存储二进制文件,尤其是大型文件,可能会在首次请求配置时遇到延迟,或在服务器中遇到内存不足错误。

章节总结​

📄️加密与解密

如果远程属性源包含加密内容(以 {cipher} 开头的值),在通过 HTTP 发送给客户端之前会先进行解密。这种设置的主要优势在于,属性值在“静态存储”时(例如在 git 仓库中)无需以明文形式存在。如果某个值无法解密,它将被从属性源中移除,并添加一个具有相同键但前缀为 invalid 的额外属性,其值表示“不适用”(通常为 \<n/a>)。这主要是为了防止密文被用作密码而意外泄露。

📄️提供加密属性

有时,您希望客户端在本地解密配置,而不是在服务器端进行解密。在这种情况下,如果您提供了 encrypt.* 配置来定位密钥,您仍然可以使用 /encrypt 和 /decrypt 端点,但您需要通过将 spring.cloud.config.server.encrypt.enabled=false 放置在 bootstrap.\[yml|properties] 中,显式关闭对传出属性的解密。如果您不关心这些端点,那么在不配置密钥或启用标志的情况下,它应该也能正常工作。

📄️提供纯文本服务

除了使用环境抽象(或其YAML或属性格式的替代表示形式)之外,您的应用程序可能需要针对其环境定制的通用纯文本配置文件。Config Server通过一个额外的端点 /{application}/{profile}/{label}/{path} 来提供这些文件,其中 application、profile 和 label 的含义与常规环境端点相同,但 path 是文件名的路径(例如 log.xml)。此端点的源文件定位方式与环境端点相同。属性文件和YAML文件使用相同的搜索路径。然而,与聚合所有匹配资源不同,这里只返回第一个匹配的资源。

📄️嵌入配置服务器

Config Server 作为独立应用程序运行效果最佳。然而,如有需要,您可以将其嵌入到另一个应用程序中。为此,请使用 @EnableConfigServer 注解。在这种情况下,一个名为 spring.cloud.config.server.bootstrap 的可选属性可能会很有用。它是一个标志,指示服务器是否应从其自身的远程存储库进行自我配置。默认情况下,该标志是关闭的,因为它可能会延迟启动。但是,当嵌入到另一个应用程序中时,以与其他应用程序相同的方式进行初始化是有意义的。将 spring.cloud.config.server.bootstrap 设置为 true 时,您还必须使用复合环境存储库配置。例如

📄️推送通知与Spring Cloud Bus

许多源代码仓库提供商(例如 Github、Gitlab、Gitea、Gitee、Gogs 或 Bitbucket)通过 webhook 通知您仓库中的变更。您可以通过提供商用户界面将 webhook 配置为一个 URL 以及一组您感兴趣的事件。例如,Github 使用 POST 请求向 webhook 发送一个包含提交列表的 JSON 主体,并设置一个标头(X-Github-Event)为 push。如果您在 Config Server 中添加对 spring-cloud-config-monitor 库的依赖并激活 Spring Cloud Bus,那么 /monitor 端点将被启用。