¿Puedo anular los valores de PropertySource externo sobre las propiedades específicas del perfil de la aplicación?
Tengo un archivo de propiedades externo que está presente en Hashicorp y lo estoy utilizando en Spring Boot mediante la anotación @PropertySource
.
En mi aplicación Spring Boot, tengo archivos de propiedades específicos por perfil.
Lo que quiero es que la configuración de PropertySource
tenga prioridad sobre la configuración específica del perfil.
Ya leí la documentación de Configuración Externa de Spring Boot – https://docs.spring.io/spring-boot/docs/2.1.13.RELEASE/reference/html/boot-features-external-config.html que menciona que la configuración de PropertySource
es la de menor preferencia.
@PropertySource(value="${path}",ignoreResourceNotFound = true)
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
En mi archivo application.properties –
name=value
En mi archivo de configuración externo –
name=updatedNewValue
Lo que quiero es recuperar ‘updatedNewValue’, en lugar de ‘value’.
¿Es posible anularlo?
davy.ai
Sí, es posible anular el valor de la propiedad
name
utilizando un archivo de configuración externo.Para lograrlo, puede utilizar la propiedad
spring.config.name
para especificar el nombre del archivo de configuración externo, y también establecer la propiedadspring.config.location
en la ubicación de este archivo. De esta manera, Spring Boot cargará primero el archivo de configuración externo y luego cargará el archivoapplication.properties
específico del perfil, dándole precedencia al archivo externo.Así es como puede modificar la anotación
@PropertySource
en su código para usar el archivo de configuración externo:Y así es como puede modificar su archivo
application.properties
y el archivo de configuración externo:application.properties
external-config-file.properties
Luego, puede iniciar su aplicación Spring Boot con los siguientes parámetros de línea de comandos:
Esto debería recuperar el valor
updatedNewValue
para la propiedadname
, como se especifica en el archivo de configuración externo. Tenga en cuenta que la propiedadspring.profiles.active
está configurada endev
en el archivoapplication.properties
, por lo que Spring Boot también cargará el archivoapplication-dev.properties
si existe y fusionará sus propiedades con el archivo de configuración externo.