我有一个小的spring boot web应用程序(可执行jar),它在application.properties文件中有一些自定义属性。我的目标是能够在运行时动态地更改这些属性,而无需运行构建/部署或重新启动Java进程。 spring-cloud-starter-config项目似乎非常适合这种情况(即使我没有使用配置服务器)但我遇到了以下问题:
在我的pom.xml中,我包含了spring-boot-starter-actuator和spring-cloud-starter-config的依赖项。 application.properties配置以下属性
management.port=8081
management.context-path=/management
management.security.enabled=false
foo=bar
我可以使用读取变量
curl http://localhost:8081/management/env/foo
{"foo":"bar"}
以下更新似乎也成功了
curl -X POST -d foo=foo http://localhost:8081/management/env
{"foo":"foo"}
当我查询整个env时,我看到manager部分中的更改值和applicationConfig中的原始值
curl http://localhost:8081/management/env
{
...
"manager": {
"foo": "foo"
},
...
"configServerClient": {
"spring.cloud.config.enabled": "false"
},
...
"applicationConfig: [classpath:/application.properties]": {
...
"foo": "bar",
...
}
}
现在当我再次查询变量时,我仍然得到旧的值
curl http://localhost:8081/management/env/foo
{"foo":"bar"}
这与我在一些网络博客上看到的相反。根据我的理解,应该显示更改的值。我究竟做错了什么?有没有更好的方法来动态更改application.properties中的值而无需重新启动服务器?
非常感谢您的帮助。
您需要在将更改发布到env后运行刷新
curl -X POST http://localhost:8081/management/refresh
对我来说它只适用于
curl -H "Content-Type: application/json" -X POST -d '{"name":"foo", "value":"bar"}' http://localhost:8081/management/env/
否则我明白了
"Missing parameters: value,name"
也许您需要设置management.security.enabled:false
以允许向/env
端点发送POST请求。