Spring Cloud Config Server无法解析占位符

时间:2018-08-05 20:52:16

标签: java spring-boot docker-compose spring-cloud spring-cloud-config

我已将spring-cloud-config-server添加到我的堆栈中,希望为不同的spring配置文件(即开发,暂存和生产)加载不同的配置集。

我的配置服务器应用程序从端口8888启动,直接从私有gitlab存储库中获取配置,并且具有安全性。我通过手动点击并检查是否返回了正确的属性来进行测试。到目前为止一切顺利。

我将有几个“客户端”应用程序,我想使用配置服务器中的属性,但现在我只尝试其中的一个。为了对其进行测试,我已经放置了

@Value("${some.property}")
private string someProperty;

在客户端应用程序中我的网络资源之一中。此属性不在客户端应用程序的任何属性文件中(这可能是个问题,这很奇怪-但如果存在,则似乎是限制性的)。

我也将客户端应用程序指向了配置服务器。配置服务器和客户端应用程序的应用程序配置都在其bootstrap.properties文件中,以确保它们在此过程的早期加载。

事实上,我的两个应用程序都在Docker映像中进行了容器化,它们是由docker-compose.yml文件启动的。我实际上已经将其设置为客户端应用程序在启动之前等待配置服务器运行。

在客户端应用程序启动期间,我可以看到它正在从配置服务器获取配置:

| 20:12:50.692 [main] INFO  o.s.c.c.c.ConfigServicePropertySourceLocator.getRemoteEnvironment 205 - Fetching config from server at : http://config-server:8888

似乎成功使用205。

但是,客户端应用程序启动失败:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'exampleResource': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'some.property' in value "${some.property}"

我在客户端应用程序中将活动配置文件设置为“开发”。配置服务器上的属性文件名为:

myapp-development.properties
myapp-staging.properties
myapp-production.properties

我当然希望客户端应用程序从服务器获取配置(我可以看到这种情况),然后该属性在启动时可供客户端应用程序使用,但事实并非如此。它像在值注释中指定默认值一样简单吗?还是我忽略了更基本的东西?我按照本指南的说明进行操作,并且我的配置服务器指向上面提到的git存储库:

http://www.baeldung.com/spring-cloud-configuration

谢谢。

1 个答案:

答案 0 :(得分:1)

您在客户端应用程序中错误地设置了凭据。

应该是

spring.cloud.config.username=myConfigServerUserName
spring.cloud.config.password=myConfigServerPassword

代替spring.security.user.namespring.security.user.password(在配置服务器应用程序中使用)。

请参阅: http://cloud.spring.io/spring-cloud-static/spring-cloud-config/2.0.1.RELEASE/single/spring-cloud-config.html#_security_2