Spring Cloud 配置客户端未从配置服务器中选择值
Posted
技术标签:
【中文标题】Spring Cloud 配置客户端未从配置服务器中选择值【英文标题】:Spring Cloud config client not picking values from Config server 【发布时间】:2020-07-23 03:25:41 【问题描述】:我的配置客户端没有从配置中选择属性值 服务器。
http://localhost:8888/customer_service/default
Config 服务器端点为 Config 客户端返回正确的值,
"name": "customer_service",
"profiles": [
"default"
],
"label": null,
"version": "c7648db5662dc65aeaad9c91abbf58b41010be7c",
"state": null,
"propertySources": [
"name": "https://github.com/prasadrpm/MicroService_config.git/customer_service.properties",
"source":
"customer.config.location": "XXXX",
"customer.config.name": "YYYY"
]
配置客户端 bootstrap.properties
server.port=8080
spring.application.name=customer_service
spring.cloud.config.enabled=true
spring.cloud.config.name=config_server
spring.cloud.config.uri=http://localhost:8888
配置客户端日志
2020-04-10 16:47:00.725 INFO 14976 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
2020-04-10 16:47:03.267 INFO 14976 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Located environment: name=config_server, profiles=[default], label=null, version=c7648db5662dc65aeaad9c91abbf58b41010be7c, state=null
2020-04-10 16:47:03.269 INFO 14976 --- [ main] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource name='bootstrapProperties-configClient']
2020-04-10 16:47:03.280 INFO 14976 --- [ main] com.customer.CustomerServiceApplication : No active profile set, falling back to default profiles: default
...
2020-04-10 16:47:05.164 INFO 14976 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1860 ms
2020-04-10 16:47:05.549 WARN 14976 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customerController': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'customer.config.location' in value "$customer.config.location"
2020-04-10 16:47:05.552 INFO 14976 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
2020-04-10 16:47:05.577 INFO 14976 --- [ main] ConditionEvaluationReportLoggingListener :
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-04-10 16:47:05.595 ERROR 14976 --- [ main] o.s.boot.SpringApplication : Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customerController': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'customer.config.location' in value "$customer.config.location"
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:405) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1422) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
【问题讨论】:
【参考方案1】:返回正确属性/配置的 URL 是:localhost:8888/customer_service/default
客户端应用程序正在根据以下数据查询属性:
c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
c.c.c.ConfigServicePropertySourceLocator : Located environment: name=config_server, profiles=[default], label=null, version=c7648db5662dc65aeaad9c91abbf58b41010be7c, state=null
b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource name='bootstrapProperties-configClient']
com.customer.CustomerServiceApplication : No active profile set, falling back to default profiles: default
...
所以,实际上,客户端应用程序正在调用:
localhost:8888/config_server/default
所以,有两种解决方案:
删除 bootstrap.properties 中的spring.cloud.config.name=config_server
属性,您的应用程序应该能够获取属性。
将spring.cloud.config.name
的值更新为customer_service
服务。但是如果你没有明确提供spring.cloud.config.name
,那么客户端将使用spring.application.name
作为spring.cloud.config.name
的默认值。
【讨论】:
【参考方案2】:您在这里使用了什么注释? 这样就可以轻松找回了。
@Value("$customer.config.location")
private String someOtherProperty;
不需要
spring.cloud.config.name=config_server
【讨论】:
我只是使用完全相同的注释。 @Value("$customer.config.location") 私有字符串位置; @Arunprasad 你能分享你试图检索它的控制器的 sn-p 吗?以上是关于Spring Cloud 配置客户端未从配置服务器中选择值的主要内容,如果未能解决你的问题,请参考以下文章
Spring Cloud Config客户端未从配置服务器加载值
Spring Boot 应用程序未从 Spring Cloud Config Server 读取属性值
通过总线机制实现自动刷新客户端配置(Consul,Spring Cloud Config,Spring Cloud Bus)
基于Spring Cloud的微服务构建学习-3 Spring Cloud Eureka配置详解
spring boot 2.0.3+spring cloud (Finchley)6配置中心Spring Cloud Config