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
:
quarkus extension add 'quarkus-config-yaml'
./mvnw quarkus:add-extension -Dextensions='quarkus-config-yaml'
./gradlew addExtension --extensions='quarkus-config-yaml'
También puede añadir la siguiente dependencia en su proyecto:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-config-yaml</artifactId>
</dependency>
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:
quarkus:
http:
port: 8081
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.