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

Configuración YAML

YAML es un formato muy popular. Kubernetes se basa en gran medida en el formato YAML para escribir los distintos descriptores de recursos.

Quarkus ofrece la posibilidad de utilizar YAML además del archivo estándar de propiedades de Java.

Activación de la configuración YAML

Para activar la configuración de YAML, añada la extensión quarkus-config-yaml:

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

También puede añadir la siguiente dependencia en su proyecto:

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

Elimine el src/main/resources/application.properties y cree un archivo src/main/resources/application.yaml.

Si ambos están presentes, Quarkus da prioridad a las propiedades de configuración del archivo YAML primero y luego del archivo Properties. Sin embargo, para evitar confusiones, se recomienda eliminar el archivo Properties.
Quarkus admite las extensiones de archivo yml y yaml.

Ejemplo

Los siguientes fragmentos proporcionan ejemplos de configuración YAML:

# YAML supports comments
quarkus:
  datasource:
    db-kind: postgresql
    jdbc:
      url: jdbc:postgresql://localhost:5432/some-database

# REST Client configuration property
quarkus:
  rest-client:
    org.acme.rest.client.ExtensionsService:
      url: https://stage.code.quarkus.io/api
# For configuration property names that use quotes, do not split the string inside the quotes
quarkus:
  log:
    category:
      "io.quarkus.category":
        level: INFO
quarkus:
  datasource:
    url: jdbc:postgresql://localhost:5432/quarkus_test

  hibernate-orm:
    database:
      generation: drop-and-create

  oidc:
    enabled: true
    auth-server-url: http://localhost:8180/auth/realms/quarkus
    client-id: app


app:
  frontend:
    oidc-realm: quarkus
    oidc-app: app
    oidc-server: http://localhost:8180/auth

# With profiles
"%test":
   quarkus:
     oidc:
       enabled: false
     security:
        users:
            file:
              enabled: true
              realm-name: quarkus
              plain-text: true

Perfiles

Como puede ver en el fragmento anterior, puede utilizar perfiles en YAML. La clave del perfil requiere comillas dobles: "%test". Esto se debe a que YAML no admite claves que empiecen por %.

Todo lo que está bajo la clave "%test" sólo se habilita cuando el perfil test está activo. Por ejemplo, en el fragmento anterior desactiva OIDC ( quarkus.oidc.enabled: false), mientras que sin el perfil test, estaría activado.

En cuanto al formato de las propiedades de Java, puede definir su propio perfil:

quarkus:
  http:
    port: 8081

"%staging":
    quarkus:
        http:
          port: 8082

Si habilita el perfil staging, el puerto HTTP será el 8082, mientras que en caso contrario sería el 8081.

La configuración YAML también admite archivos conscientes de los perfiles. En este caso, las propiedades de un perfil específico pueden residir en un archivo con nombre application-{profile}.yaml. El ejemplo anterior puede expresarse como:

aplicación.yaml
quarkus:
  http:
    port: 8081
application-staging.yaml
quarkus:
  http:
    port: 8082

Expresiones

The YAML format also supports property expressions, using the same format as Java Properties:

mach: 3
x:
  factor: 2.23694

display:
  mach: ${mach}
  unit:
    name: "mph"
    factor: ${x.factor}

Note that you can reference nested properties using the . (dot) separator as in ${x.factor}.

Archivo application.yaml externo

The application.yaml file may also be placed in config/application.yaml to specialize the runtime configuration. The file has to be present in the root of the working directory relative to the Quarkus application runner:

.
├── config
│    └── application.yaml
├── my-app-runner

Los valores de este archivo anulan cualquier valor del archivo regular application.yaml si existe.

Conflictos de claves de configuración

La especificación MicroProfile Config define las claves de configuración como una cadena arbitraria delimitada por .. Sin embargo, los formatos estructurados como YAML sólo admiten un subconjunto del posible espacio de nombres de configuración. Por ejemplo, considere las dos propiedades de configuración quarkus.http.cors y quarkus.http.cors.methods. Una propiedad es el prefijo de otra, por lo que puede no ser inmediatamente evidente cómo especificar ambas claves en su configuración YAML.

Esto se resuelve utilizando una clave null (representada por ~) para cualquier propiedad YAML que sea un prefijo de otra:

quarkus:
  http:
    cors:
      ~: true
      methods: GET,PUT,POST

Las claves de YAML null no se incluyen en el ensamblaje del nombre de la propiedad de configuración, lo que permite utilizarlas en cualquier nivel para desambiguar las claves de configuración.