我已经将spring-cloud-config-server添加到我的堆栈中,希望为不同的spring配置文件(即开发,登台和 生产环境 )加载不同的配置集 .
我的配置服务器应用程序在端口8888上启动,直接从私有gitlab存储库获取配置并具有安全性 . 我通过手动命中并检查正确的属性是否返回来测试它 . 到现在为止还挺好 .
我将有几个“客户端”应用程序,我想从我的配置服务器使用属性,但现在我只是尝试一个 . 为了测试它,我已经放了一个
@Value("${some.property}")
private string someProperty;
在我的客户端应用程序中的一个Web资源中 . 此属性不在任何客户端应用程序的属性文件中(想知道这是否可能是问题 - 但如果是这样,它似乎是限制性的) .
我还在配置服务器上指出了客户端应用程序 . 配置服务器和客户端应用程序的配置都在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
我的希望当然是客户端应用程序从服务器(我可以看到发生)获取配置,然后该属性在启动时可供客户端应用程序使用,但似乎不是这种情况 . 是否像在值注释中指定默认值一样简单?还是我忽略了一些更基本的东西?我按照本指南fwiw和我的配置服务器指向git存储库,如上所述:
http://www.baeldung.com/spring-cloud-configuration
提前致谢 .
1 回答
您在客户端应用程序中错误地设置凭据 .
它应该是
而不是
spring.security.user.name
和spring.security.user.password
(在配置服务器应用程序中使用) .见:http://cloud.spring.io/spring-cloud-static/spring-cloud-config/2.0.1.RELEASE/single/spring-cloud-config.html#_security_2