spring-cloud-starter-config POST / env无效

问题描述 投票:2回答:3

我有一个小的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中的值而无需重新启动服务器?

非常感谢您的帮助。

spring spring-boot spring-boot-actuator spring-cloud-config
3个回答
2
投票

您需要在将更改发布到env后运行刷新

curl -X POST http://localhost:8081/management/refresh

1
投票

对我来说它只适用于

curl -H "Content-Type: application/json" -X POST -d '{"name":"foo", "value":"bar"}' http://localhost:8081/management/env/

否则我明白了

"Missing parameters: value,name"

0
投票

也许您需要设置management.security.enabled:false以允许向/env端点发送POST请求。

© www.soinside.com 2019 - 2024. All rights reserved.