Jerarquía y prioridad de configuración en Spring Boot

Spring Boot consulta múltiples orígenes al resolver la configuración de una aplicación. Entender esa jerarquía permite mantener valores por defecto empaquetados y especializarlos en cada entorno sin alterar el código.

Ubicaciones internas del proyecto

En el arranque, el framework busca application.properties o application.yml en cuatro rutas. El orden de precedencia, de mayor a menor, es:

  1. file:./config/: carpeta config en la raíz del directorio de trabajo.
  2. file:./: raíz del directorio de trabajo.
  3. classpath:/config/: subcarpeta config dentro del classpath.
  4. classpath:/: raíz del classpath.

El directorio src/main/resources se copia a target/classes durante la compilaicón, por lo que las dos últimas rutas pertenecen al artefacto generado. Las dos primeras son rutas del sistema de archivos y, a menos que se configure lo contrario, no se incluyen en el JAR. Por eso, no conviene depender de ellas una vez empaquetada la aplicación.

Reglas de combinación

Cuando varias fuentes definen la misma clave, prevalece el valor de la fuente con mayor prioridad. Si una clave solo aparece en una fuente de menor rango, se integra al conjunto final sin conflictos. Esto produce una configuración resultante basada en valores por defecto enmendados por fuentes más específicas.

Opciones de configuración externa

Argumentos de línea de comandos

Tras empaquetar la aplicación, puedes modificar propiedades individuales directamente al ejecutar el JAR:

java -jar servicio-1.2.0.jar --server.port=9090 --spring.application.name=gestion-pedidos

Los pares clave-valor se separan con espacios y tienen prioridad sobre cualquier archivo.

Ruta personalizada con spring.config.location

Si necesitas cambiar muchos valores, resulta más cómodo usar un archivo externo. Indícalo al arrancar:

java -jar servicio-1.2.0.jar --spring.config.location=file:/opt/miapp/config/externo.yml

Ese archivo actúa de forma complementaria con los que el JAR ya carga por defecto.

Archivo junto al JAR

Colocar un application.properties o application.yml en el mismo directorio del JAR es una de las técnicas más útiles para despliegues. Spring Boot lo detecta automáticamente y le asigna mayor prioridad que al archivo con el mismo nombre dentro del artefacto, permitiendo variar la configuración simplemente copiando un archivo.

Jerarquía completa de fuentes

La referencia oficial establece el siguiente orden, de mayor a menor precedencia:

  1. Argumentos de la línea de comandos.
  2. Atributos JNDI (java:comp/env).
  3. Propiedades del sistema Java (System.getProperties()).
  4. Variables de entorno del sistema operativo.
  5. application-{perfil}.properties o application-{perfil}.yml con perfil activo, fuera del JAR.
  6. Los mismos archivos con perfil activo, dentro del JAR.
  7. application.properties o application.yml sin perfil, fuera del JAR.
  8. Los mismos archivos sin perfil, dentro del JAR.
  9. Anotación @PropertySource sobre clases anotadas con @Configuration.

Etiquetas: Spring Boot application.yml application.properties externalized configuration command-line arguments

Publicado el 6-22 00:47