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:
file:./config/: carpetaconfigen la raíz del directorio de trabajo.file:./: raíz del directorio de trabajo.classpath:/config/: subcarpetaconfigdentro del classpath.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:
- Argumentos de la línea de comandos.
- Atributos JNDI (
java:comp/env). - Propiedades del sistema Java (
System.getProperties()). - Variables de entorno del sistema operativo.
application-{perfil}.propertiesoapplication-{perfil}.ymlcon perfil activo, fuera del JAR.- Los mismos archivos con perfil activo, dentro del JAR.
application.propertiesoapplication.ymlsin perfil, fuera del JAR.- Los mismos archivos sin perfil, dentro del JAR.
- Anotación
@PropertySourcesobre clases anotadas con@Configuration.