The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.

Lectura de propiedades del servidor de configuración de Spring Cloud

Esta guía explica cómo su aplicación Quarkus puede leer las propiedades de configuración en tiempo de ejecución desde el Servidor de Configuración de Spring Cloud.

Requisitos previos

To complete this guide, you need:

  • Roughly 15 minutes

  • An IDE

  • JDK 11+ installed with JAVA_HOME configured appropriately

  • Apache Maven 3.8.6

  • Optionally the Quarkus CLI if you want to use it

  • Optionally Mandrel or GraalVM installed and configured appropriately if you want to build a native executable (or Docker if you use a native container build)

Solución

Le recomendamos que siga las instrucciones de las siguientes secciones y cree la aplicación paso a paso.

Poner en marcha un servidor de configuración

Para poner en marcha el Config Server necesario para esta guía, siga las instrucciones indicadas aquí. El resultado final de ese proceso es un Config Server en funcionamiento que proporcionará el valor Hello world para una propiedad de configuración llamada message cuando la aplicación que consulta el servidor se llama a-bootiful-client.

Creación del proyecto Maven

En primer lugar, necesitamos un nuevo proyecto. Cree un nuevo proyecto con el siguiente comando:

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

To create a Gradle project, add the --gradle or --gradle-kotlin-dsl option.

For more information about how to install the Quarkus CLI and use it, please refer to the Quarkus CLI guide.

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

To create a Gradle project, add the -DbuildTool=gradle or -DbuildTool=gradle-kotlin-dsl option.

Este comando genera un proyecto que importa la extensión spring-cloud-config-client.

Si ya tienes configurado tu proyecto Quarkus, puedes añadir la extensión spring-cloud-config-client a tu proyecto ejecutando el siguiente comando en el directorio base de tu proyecto:

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'

Esto añadirá lo siguiente a su archivo de construcción:

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

En primer lugar, cree un simple recurso JAX-RS GreetingResource en el archivo src/main/java/org/acme/spring/cloud/config/client/GreetingResource.java con el siguiente aspecto:

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";
    }
}

Como queremos utilizar propiedades de configuración obtenidas del Servidor de Configuración, actualizaremos el GreetingResource para inyectar la propiedad message. El código actualizado tendrá el siguiente aspecto:

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;
    }
}

Configuración de la aplicación

Quarkus proporciona varios controles de configuración bajo la raíz quarkus.spring-cloud-config. Para los propósitos de esta guía, nuestra aplicación Quarkus va a ser configurada en application.properties como sigue:

# 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 http://localhost:8888 is the default
quarkus.spring-cloud-config.url=http://localhost:8888

Empaquetar y ejecutar la aplicación

Ejecuta la aplicación con:

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

Abra su navegador en http://localhost:8080/greeting.

El resultado debe ser: Hello world ya que es el valor obtenido del servidor Spring Cloud Config.

Ejecutar la aplicación como un ejecutable nativo

Por supuesto, puedes crear una imagen nativa siguiendo las instrucciones de la guía Construir un ejecutable nativo.

Referencia del cliente Spring Cloud Config

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

Configuration property

Type

Default

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

El formato de las duraciones utiliza el formato estándar java.time.Duration. Puede obtener más información al respecto en Duration#parse() javadoc.

También puede proporcionar valores de duración que empiecen por un número. En este caso, si el valor consiste sólo en un número, el conversor trata el valor como segundos. En caso contrario, PT se antepone implícitamente al valor para obtener un formato estándar java.time.Duration.