The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.
返回指南目录

从 Spring Cloud 配置服务器中读取配置属性

该指南阐述了你的Quarkus应用程序如何在运行时从 Spring Cloud Config Server 中读取配置属性。

先决条件

完成这个指南,你需要:

  • 大概15分钟

  • 编辑器

  • 安装JDK 11以上版本并正确配置了 JAVA_HOME

  • Apache Maven 3.8.6

  • 如果你愿意的话,还可以选择使用Quarkus CLI

  • 如果你想构建原生可执行程序,可以选择安装Mandrel或者GraalVM,并正确配置(或者使用Docker在容器中进行构建)

解决方案

我们建议你按照下面几节的说明逐步创建应用程序。

建立一个配置服务器

建立该指南所需的 配置服务器 (Config Server),请遵循 这里 的说明。该过程的最终目的是创建一个正在运行的且应用程序查询名为 a-bootiful-client 的服务器时,会为名为 message 的配置属性提供值为 Hello world 的配置服务器。

创建Maven项目

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

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

创建Grade项目,请添加 --gradle 或者 --gradle-kotlin-dsl 参数。

关于如何安装并使用Quarkus CLI的更多信息,请参考Quarkus CLI指南

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

创建Grade项目,请添加 -DbuildTool=gradle 或者 -DbuildTool=gradle-kotlin-dsl 参数。

该命令生成了一个已导入 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 JAX-RS资源:

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

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.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 javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.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 中配置以下内容:

# 使用与建立Config Server 时配置的相同的应用程序名称
quarkus.application.name=a-bootiful-client
# 启用从 Config Server 中获取配置 - 该项配置默认是关闭的
quarkus.spring-cloud-config.enabled=true
# 配置 Config Server 监听 HTTP 请求的 URL - 该配置可以被忽略,因为 http://localhost:8888 是默认值
quarkus.spring-cloud-config.url=http://localhost:8888

打包并运行该应用程序

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

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

打开你的浏览器并访问 http://localhost:8080/greeting。

结果应该是: Hello world ,因为这是从Spring Cloud 配置服务器(Config Server)上获取的值。

以本地可执行文件的方式运行该应用程序

当然,你也可以使用 构建本地可执行文件指南 的说明来创建一个本地镜像。

Spring Cloud 配置客户端参考

Configuration property fixed at build time - All other configuration properties are overridable at runtime

Configuration property

类型

默认

If enabled, will try to read the configuration from a Spring Cloud Config Server

Environment variable: QUARKUS_SPRING_CLOUD_CONFIG_ENABLED

boolean

false

If set to true, the application will not stand up if it cannot obtain configuration from the Config Server

Environment variable: QUARKUS_SPRING_CLOUD_CONFIG_FAIL_FAST

boolean

false

The Base URI where the Spring Cloud Config Server is available

Environment variable: QUARKUS_SPRING_CLOUD_CONFIG_URL

string

http://localhost:8888

The label to be used to pull remote configuration properties. The default is set on the Spring Cloud Config Server (generally "master" when the server uses a Git backend).

Environment variable: QUARKUS_SPRING_CLOUD_CONFIG_LABEL

string

The amount of time to wait when initially establishing a connection before giving up and timing out. Specify 0 to wait indefinitely.

Environment variable: QUARKUS_SPRING_CLOUD_CONFIG_CONNECTION_TIMEOUT

Duration

10S

The amount of time to wait for a read on a socket before an exception is thrown. Specify 0 to wait indefinitely.

Environment variable: QUARKUS_SPRING_CLOUD_CONFIG_READ_TIMEOUT

Duration

60S

The username to be used if the Config Server has BASIC Auth enabled

Environment variable: QUARKUS_SPRING_CLOUD_CONFIG_USERNAME

string

The password to be used if the Config Server has BASIC Auth enabled

Environment variable: QUARKUS_SPRING_CLOUD_CONFIG_PASSWORD

string

TrustStore to be used containing the SSL certificate used by the Config server Can be either a classpath resource or a file system path

Environment variable: QUARKUS_SPRING_CLOUD_CONFIG_TRUST_STORE

path

Password of TrustStore to be used containing the SSL certificate used by the Config server

Environment variable: QUARKUS_SPRING_CLOUD_CONFIG_TRUST_STORE_PASSWORD

string

KeyStore to be used containing the SSL certificate for authentication with the Config server Can be either a classpath resource or a file system path

Environment variable: QUARKUS_SPRING_CLOUD_CONFIG_KEY_STORE

path

Password of KeyStore to be used containing the SSL certificate for authentication with the Config server

Environment variable: QUARKUS_SPRING_CLOUD_CONFIG_KEY_STORE_PASSWORD

string

Password to recover key from KeyStore for SSL client authentication with the Config server If no value is provided, the key-store-password will be used

Environment variable: QUARKUS_SPRING_CLOUD_CONFIG_KEY_PASSWORD

string

When using HTTPS and no keyStore has been specified, whether to trust all certificates

Environment variable: QUARKUS_SPRING_CLOUD_CONFIG_TRUST_CERTS

boolean

false

Custom headers to pass the Spring Cloud Config Server when performing the HTTP request

Environment variable: QUARKUS_SPRING_CLOUD_CONFIG_HEADERS

Map<String,String>

About the Duration format

持续时间的格式使用标准的 java.time.Duration 格式您可以在 Duration#parse() javadoc 中了解更多信息。

您还可以提供以数字开头的持续时间值。 在这种情况下,如果该值仅包含一个数字,则转换器将该值视为秒。 否则,PT 会隐式添加到值的前面,以获得标准的 java.time.Duration 格式。