es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Anular una propiedad yaml de Spring Boot a través de una variable de entorno.

Usando Spring Boot 2.6.1, si tengo un archivo application.properties que se ve así:

spring.datasource.url="jdbc://blahblah"

Puedo anular ese valor en tiempo de ejecución con una variable de entorno llamada spring.datasource.url y mi aplicación se conectará a la base de datos especificada en la variable de entorno.

Sin embargo, si tengo un archivo equivalente application.yaml, especificar la variable de entorno de esa manera parece no tener efecto.

spring:
  datasource:
    url: "jdbc://localhost..."

Sin embargo, si cambio el nombre de mi variable de entorno a SPRING_DATASOURCE_URL, la anulación funciona nuevamente. Esto parece ser consistente en otras propiedades también (no solo la URL del origen de datos).

Al revisar la documentación aquí, no fue obvio por qué debería ser así, excepto que la configuración YAML parece tratarse de manera un poco diferente a los archivos de propiedades “normales”.

¿Es este comportamiento esperado?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en Spring Boot, YAML y archivos de propiedades, puedo confirmar que este comportamiento es esperado. Según la documentación de Spring Boot 2.6.1, al utilizar archivos YAML para la configuración externa, las variables de entorno deben escribirse en mayúsculas con guiones bajos separando las palabras, a diferencia de la sintaxis en minúsculas y separada por puntos utilizada en los archivos de propiedades. Por lo tanto, cambiar el nombre de la variable de entorno a SPRING_DATASOURCE_URL permitiría que la anulación funcione como se espera. Esta diferencia en la sintaxis se debe al hecho de que la configuración YAML se analiza de manera diferente a los archivos de propiedades, y las convenciones de nomenclatura de las variables de entorno reflejan esta diferencia.

Comments are closed.