Orden de propiedad en Spring Boot
-
21-12-2019 - |
Pregunta
Quiero escribir mi propio iniciador Spring Boot y dejar que herede de otro iniciador (digamos spring-boot-starter-batch).Ahora quiero establecer una de las propiedades de spring-boot-starter-batch en un valor predeterminado que difiera del valor predeterminado de spring-boot-starter-batch (por ejemplo spring.batch.job.enabled=false
en lugar de verdadero).El usuario de mi iniciador aún podrá anularlo a través de application.properties
.
Eso no es realmente posible, ¿verdad?El orden de lectura de las propiedades es el siguiente:
- Argumentos de la línea de comando.
- Propiedades del sistema Java (
System.getProperties()
). - Variables de entorno del sistema operativo.
- Atributos JNDI de
java:comp/env
- A
RandomValuePropertySource
que solo tiene propiedades enrandom.*
. @PropertySource
anotaciones en su@Configuration
clases.- Propiedades de la aplicación fuera de su frasco empaquetado (
application.properties
incluyendo YAML y variantes de perfil). - Propiedades de la aplicación empaquetadas dentro de su frasco (
application.properties
incluyendo YAML y variantes de perfil). - Propiedades predeterminadas (especificadas usando
SpringApplication.setDefaultProperties
).
Entonces si uso @PropertySource
en mi iniciador para establecer la propiedad, el usuario de mi iniciador no podrá anularla a través de application.properties
.¿No tendría sentido cambiar el orden y establecer @PropertySource
en el número 8?
¿O hay alguna manera de lograr lo que quiero?
Solución
El orden de @PropertySource
está definitivamente para el debate.Antes de ese debate, aunque debería poder agregar sus propias fuentes de propiedad en un oyente o inicializador (como el escuchador de archivos de configuración existente).