我有一个小的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中的值,而无需重启服务器?
非常感谢您的帮助。
发布于 2018-03-02 02:57:54
在将更改发布到环境后,您需要运行刷新
curl -X POST http://localhost:8081/management/refresh发布于 2018-11-09 06:26:52
对我来说,它只适用于
curl -H "Content-Type: application/json" -X POST -d '{"name":"foo", "value":"bar"}' http://localhost:8081/management/env/否则我会得到
"Missing parameters: value,name"发布于 2020-05-13 15:51:46
如果您使用的是高于2.2.4的spring boot版本,则必须使用下面的属性手动启用POST API调用。
management.endpoint.env.post.enabled=true
https://stackoverflow.com/questions/42962897
复制相似问题