我有一个小的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中的值?
非常感谢您的帮助。
答案 0 :(得分:2)
您需要在将更改发布到env
后运行刷新curl -X POST http://localhost:8081/management/refresh
答案 1 :(得分:1)
对我来说,它仅适用于
curl -H "Content-Type: application/json" -X POST -d '{"name":"foo", "value":"bar"}' http://localhost:8081/management/env/
否则我会得到
"Missing parameters: value,name"
答案 2 :(得分:1)
如果您使用的Spring Boot版本高于2.2.4,则必须使用以下属性手动启用POST API调用。
management.endpoint.env.post.enabled = true
答案 3 :(得分:0)
也许您需要设置management.security.enabled:false
以允许向/env
端点发送POST请求。