我一直在遵循Baeldung的this教程来设置Spring Cloud Config服务器和客户端。我相信我已经正确设置了服务器,因为进入http://localhost:8888/service-config/development/master似乎可以正确显示定义了user.role的json:
{"name":"service-config","profiles":["development"],"label":"master","version":"d30a6015a6b8cb1925f6e61cee22721f331e5783","state":null,"propertySources":[{"name":"file:///C:.../git/service-config-data/service-config-development.properties","source":{"user.role":"Developer"}},{"name":"file:///C:.../git/service-config-data/service-config.properties","source":{"user.role":"Developer"}}]}
但是,我似乎无法正确地将Spring Cloud Config客户端连接到服务器-客户端无法运行,无法解决@Value("${user.role}")
批注上的占位符错误。我尝试将默认值添加到注释中,然后手动刷新值(使用@refreshscope
注释),但无济于事。
我已经通过运行带有--debug --trace
标志的工具查看了调试和跟踪日志,但是我找不到客户端何时/是否正在调用服务器以及服务器的哪个config-data .properties文件。实际上是在寻找。我对如何进行有点迷茫。
这是我的服务器application.properties
:
spring.application.name=service-config
server.port=8888
spring.cloud.config.server.git.uri=file:///${user.home}/git/service-config-data
spring.cloud.config.server.git.clone-on-start=false
spring.security.user.name=root
spring.security.user.password=toor
在service-config-data
文件夹中,包含以下文件:
user.role=Developer
我尝试了名为service-config.properties,service-config-client.properties,service-config-development.properties和service-config-client-development.properties的文件,但它们似乎都无法通过user.role
。
这是我的客户:
@SpringBootApplication
@RestController
@RefreshScope
public class ServiceConfigClient {
@Value("${user.role:unknown}")
private String role;
@RequestMapping(
value = "/whoami/{username}",
method = RequestMethod.GET,
produces = MediaType.TEXT_PLAIN_VALUE)
public String whoami(@PathVariable("username") String username) {
return String.format("Hello! You're %s and you'll become a(n) %s...\n", username, role);
}
}
还有我的客户bootstrap.properties
:
spring.application.name=service-config-client
spring.profiles.active=development
spring.cloud.config.uri=http://localhost:8888
spring.cloud.config.username=root
spring.cloud.config.password=toor
management.endpoints.web.exposure.include=*
如何正确将客户端连接到服务器,以便它可以成功提取配置数据?谢谢。
答案 0 :(得分:1)
在配置服务器中,关于客户端服务名称和相应属性来源存在混淆。
您需要执行以下一项操作:
//client bootstrap.properties
spring.application.name=service-config
service-config
更改为service-config-client
答案 1 :(得分:1)
我的问题得以解决,方法是将spring.cloud.config.name=service-config
添加到service-config-client的bootstrap.properties
以及将spring-cloud-config-client
添加到{{1 }}