Tengo una pequeña aplicación web Spring Boot (jar ejecutable) que tiene algunas propiedades personalizadas dentro del archivo application.properties. Mi objetivo es poder modificar dinámicamente estas propiedades en tiempo de ejecución sin tener que ejecutar una compilación/implementación o reiniciar el proceso de Java. El proyecto spring-cloud-starter-config parece ser adecuado para esto (aunque no estoy usando un servidor de configuración), pero me encontré con el siguiente problema:
En mi pom.xml incluyo dependencias para spring-boot-starter-actuator y spring-cloud-starter-config. La aplicación.propiedades configura las siguientes propiedades
management.port=8081 management.context-path=/management management.security.enabled=false foo=barPuedo leer las variables usando
curl http://localhost:8081/management/env/foo {"foo":"bar"}La actualización a continuación parece tener éxito también
curl -X POST -d foo=foo http://localhost:8081/management/env {"foo":"foo"}Cuando consulto todo el entorno, veo el valor modificado en la sección del administrador y el valor original dentro de applicationConfig
curl http://localhost:8081/management/env { ... "manager": { "foo": "foo" }, ... "configServerClient": { "spring.cloud.config.enabled": "false" }, ... "applicationConfig: [classpath:/application.properties]": { ... "foo": "bar", ... } }Ahora, cuando vuelvo a consultar la variable, todavía obtengo el valor anterior
curl http://localhost:8081/management/env/foo {"foo":"bar"}Esto es contrario a lo que leo en algunos blogs web. Según tengo entendido, el valor modificado debería aparecer. ¿Qué estoy haciendo mal? ¿Hay una mejor manera de cambiar dinámicamente los valores en application.properties sin reiniciar el servidor?
Su ayuda es muy apreciada.
Debe ejecutar la actualización después de publicar cambios en env
curl -X POST http://localhost:8081/management/refreshpara mi solo funciona con
curl -H "Content-Type: application/json" -X POST -d '{"name":"foo", "value":"bar"}' http://localhost:8081/management/env/de lo contrario obtengo
"Missing parameters: value,name"Si está utilizando una versión Spring Boot superior a 2.2.4, debe habilitar manualmente la llamada a la API POST utilizando la siguiente propiedad.
administración.endpoint.env.post.enabled=true