spring-cloud-starter-config POST / env无法正常工作

时间:2017-03-22 21:22:55

标签: spring spring-boot spring-boot-actuator spring-cloud-config

我有一个小的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中的值?

非常感谢您的帮助。

4 个答案:

答案 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请求。