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.

¿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?

Tags:  , ,

Answer

  1. Avatar for 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 propiedad spring.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 archivo application.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:

    @PropertySource(ignoreResourceNotFound = true)
    public class MyApplication {
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    }
    

    Y así es como puede modificar su archivo application.properties y el archivo de configuración externo:

    application.properties

    spring.profiles.active=dev
    

    external-config-file.properties

    name=updatedNewValue
    

    Luego, puede iniciar su aplicación Spring Boot con los siguientes parámetros de línea de comandos:

    java -jar my-application.jar --spring.config.name=external-config-file --spring.config.location=file:/ruta/al/archivo-de-configuracion-externo.properties
    

    Esto debería recuperar el valor updatedNewValue para la propiedad name, como se especifica en el archivo de configuración externo. Tenga en cuenta que la propiedad spring.profiles.active está configurada en dev en el archivo application.properties, por lo que Spring Boot también cargará el archivo application-dev.properties si existe y fusionará sus propiedades con el archivo de configuración externo.

Comments are closed.