编辑此页面

从 Spring Cloud Config Server 读取属性

本指南解释了您的 Quarkus 应用程序如何在运行时从 Spring Cloud Config Server 读取配置属性。

先决条件

要完成本指南,您需要

  • 大约 15 分钟

  • 一个 IDE

  • 已安装 JDK 17+ 并正确配置了 JAVA_HOME

  • Apache Maven 3.9.9

  • 如果您想使用它,可以选择 Quarkus CLI

  • 如果您想构建本机可执行文件(或者如果您使用本机容器构建,则为 Docker),可以选择安装 Mandrel 或 GraalVM 并进行适当的配置

解决方案

我们建议您按照以下章节中的说明逐步创建应用程序。

搭建 Config Server

要搭建本指南所需的 Config Server,请按照此处概述的说明进行操作。该过程的最终结果是一个正在运行的 Config Server,当查询服务器的应用程序命名为 a-bootiful-client 时,它将为名为 message 的配置属性提供 Hello world 值。

创建 Maven 项目

首先,我们需要一个新项目。使用以下命令创建一个新项目

CLI
quarkus create app org.acme:spring-cloud-config-quickstart \
    --extension='rest,spring-cloud-config-client' \
    --no-code
cd spring-cloud-config-quickstart

要创建 Gradle 项目,请添加 --gradle--gradle-kotlin-dsl 选项。

有关如何安装和使用 Quarkus CLI 的更多信息,请参阅 Quarkus CLI 指南。

Maven
mvn io.quarkus.platform:quarkus-maven-plugin:3.24.4:create \
    -DprojectGroupId=org.acme \
    -DprojectArtifactId=spring-cloud-config-quickstart \
    -Dextensions='rest,spring-cloud-config-client' \
    -DnoCode
cd spring-cloud-config-quickstart

要创建 Gradle 项目,请添加 -DbuildTool=gradle-DbuildTool=gradle-kotlin-dsl 选项。

对于 Windows 用户

  • 如果使用 cmd,(不要使用反斜杠 \ 并将所有内容放在同一行上)

  • 如果使用 Powershell,请将 -D 参数用双引号括起来,例如 "-DprojectArtifactId=spring-cloud-config-quickstart"

此命令生成一个导入 spring-cloud-config-client 扩展的项目。

如果您已经配置了 Quarkus 项目,则可以通过在项目基本目录中运行以下命令将 spring-cloud-config-client 扩展添加到您的项目

CLI
quarkus extension add spring-cloud-config-client
Maven
./mvnw quarkus:add-extension -Dextensions='spring-cloud-config-client'
Gradle
./gradlew addExtension --extensions='spring-cloud-config-client'

这会将以下内容添加到您的构建文件中

pom.xml
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-spring-cloud-config-client</artifactId>
</dependency>
build.gradle
implementation("io.quarkus:quarkus-spring-cloud-config-client")

GreetingController

首先,在 src/main/java/org/acme/spring/cloud/config/client/GreetingResource.java 文件中创建一个简单的 GreetingResource Jakarta REST 资源,如下所示

package org.acme.spring.spring.cloud.config.client;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;

@Path("/hello")
public class GreetingResource {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "hello";
    }
}

由于我们要使用从 Config Server 获取的配置属性,我们将更新 GreetingResource 以注入 message 属性。更新后的代码如下所示

package org.acme.spring.spring.cloud.config.client;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;

import org.eclipse.microprofile.config.inject.ConfigProperty;

@Path("/hello")
public class GreetingResource {

    @ConfigProperty(name = "message", defaultValue="hello default")
    String message;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return message;
    }
}

配置应用程序

Quarkus 在 quarkus.spring-cloud-config 根目录下提供了各种配置旋钮。为了本指南的目的,我们的 Quarkus 应用程序将在 application.properties 中配置如下

# use the same name as the application name that was configured when standing up the Config Server
quarkus.application.name=a-bootiful-client
# enable retrieval of configuration from the Config Server - this is off by default
quarkus.spring-cloud-config.enabled=true
# configure the URL where the Config Server listens to HTTP requests - this could have been left out since https://:8888 is the default
quarkus.spring-cloud-config.url=https://:8888

如果您使用的是 Gradle,则 Gradle 设置 rootProject.name 优先于 quarkus.application.name,因此请务必将 Gradle 属性设置为您希望 Spring Cloud Config 服务器看到的应用程序名称。

打包并运行应用程序

使用以下命令运行应用程序

CLI
quarkus dev
Maven
./mvnw quarkus:dev
Gradle
./gradlew --console=plain quarkusDev

在浏览器中打开 https://:8080/greeting

结果应该是:Hello world,因为它​​是从 Spring Cloud Config 服务器获得的值。

将应用程序作为原生可执行文件运行

您当然可以使用构建原生可执行文件指南的说明来创建原生镜像。

Spring Cloud Config Client 参考

构建时固定的配置属性 - 所有其他配置属性都可以在运行时覆盖

配置属性

类型

默认

如果启用,将尝试从 Spring Cloud Config Server 读取配置

环境变量:QUARKUS_SPRING_CLOUD_CONFIG_ENABLED

显示更多

布尔值

false

如果设置为 true,如果应用程序无法从 Config Server 获取配置,则不会启动

环境变量:QUARKUS_SPRING_CLOUD_CONFIG_FAIL_FAST

显示更多

布尔值

false

Spring Cloud Config Server 可用的基本 URI

环境变量:QUARKUS_SPRING_CLOUD_CONFIG_URL

显示更多

字符串

https://:8888

Spring Cloud Config 服务器上的应用程序名称。可以是名称列表,用于加载多个文件(值用逗号分隔)

环境变量:QUARKUS_SPRING_CLOUD_CONFIG_NAME

显示更多

字符串

${quarkus.application.name:}

用于拉取远程配置属性的标签。默认设置在 Spring Cloud Config Server 上(通常在使用 Git 后端时为“master”)。

环境变量:QUARKUS_SPRING_CLOUD_CONFIG_LABEL

显示更多

字符串

最初建立连接时等待放弃并超时的时长。

指定 0 以无限期等待。

环境变量:QUARKUS_SPRING_CLOUD_CONFIG_CONNECTION_TIMEOUT

显示更多

Duration 

10S

在抛出异常之前等待套接字读取的时间。

指定 0 以无限期等待。

环境变量:QUARKUS_SPRING_CLOUD_CONFIG_READ_TIMEOUT

显示更多

Duration 

60S

如果 Config Server 启用了 BASIC Auth,则使用的用户名

环境变量:QUARKUS_SPRING_CLOUD_CONFIG_USERNAME

显示更多

字符串

如果 Config Server 启用了 BASIC Auth,则使用的密码

环境变量:QUARKUS_SPRING_CLOUD_CONFIG_PASSWORD

显示更多

字符串

要使用的 TrustStore,其中包含 Config 服务器使用的 SSL 证书。可以是类路径资源或文件系统路径

环境变量:QUARKUS_SPRING_CLOUD_CONFIG_TRUST_STORE

显示更多

path

要使用的 TrustStore 的密码,其中包含 Config 服务器使用的 SSL 证书

环境变量:QUARKUS_SPRING_CLOUD_CONFIG_TRUST_STORE_PASSWORD

显示更多

字符串

要使用的 KeyStore,其中包含用于与 Config 服务器进行身份验证的 SSL 证书。可以是类路径资源或文件系统路径

环境变量:QUARKUS_SPRING_CLOUD_CONFIG_KEY_STORE

显示更多

path

要使用的 KeyStore 的密码,其中包含用于与 Config 服务器进行身份验证的 SSL 证书

环境变量:QUARKUS_SPRING_CLOUD_CONFIG_KEY_STORE_PASSWORD

显示更多

字符串

从 KeyStore 恢复密钥以使用 Config 服务器进行 SSL 客户端身份验证的密码。如果未提供值,则将使用 key-store-password

环境变量:QUARKUS_SPRING_CLOUD_CONFIG_KEY_PASSWORD

显示更多

字符串

当使用 HTTPS 且未指定 keyStore 时,是否信任所有证书

环境变量:QUARKUS_SPRING_CLOUD_CONFIG_TRUST_CERTS

显示更多

布尔值

${quarkus.tls.trust-all:false}

执行 HTTP 请求时传递给 Spring Cloud Config Server 的自定义标头

环境变量:QUARKUS_SPRING_CLOUD_CONFIG_HEADERS__HEADER_NAME_

显示更多

Map<String,String>

用于查找的配置文件

环境变量:QUARKUS_SPRING_CLOUD_CONFIG_PROFILES

显示更多

字符串列表

Microprofile Config ordinal.

环境变量:QUARKUS_SPRING_CLOUD_CONFIG_ORDINAL

显示更多

整数

450

关于 Duration 格式

要编写 duration 值,请使用标准 java.time.Duration 格式。有关更多信息,请参阅 Duration#parse() Java API 文档

您还可以使用简化的格式,以数字开头

  • 如果该值仅为一个数字,则表示以秒为单位的时间。

  • 如果该值是一个数字后跟 ms,则表示以毫秒为单位的时间。

在其他情况下,简化格式将被转换为 java.time.Duration 格式以进行解析

  • 如果该值是一个数字后跟 hms,则在其前面加上 PT

  • 如果该值是一个数字后跟 d,则在其前面加上 P

相关内容