【发布时间】:2019-01-12 20:31:56
【问题描述】:
我已将 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
提前致谢。
【问题讨论】:
-
"Fetching config from server at ..." 日志在获取数据之前发生,而不是在 205 之后 - 这不是响应代码。 (不知道这是什么,检查你的记录器格式)。通常,在此日志消息之后,您应该看到“Located environment...”,然后是“Located property source...”以及有关属性的信息。一般来说,您的假设和理解是正确的,您不需要任何默认值。看起来它应该是简单而被忽视的。您能否在 github 中提供 src 代码(可以是一个仓库中的所有内容)?我会尽力解决您的问题。
-
谢谢..所以输出不能保证获取配置然后..我明白了。好的,我不能分享整个代码库,但我在一些要点中推了(希望)相关位...... 配置服务:gist.github.com/bbk-pij-2012-22/… 客户服务:gist.github.com/bbk-pij-2012-22/… 带有流氓变量的资源(仅用于测试目的并且清楚我们甚至没有走到这一步):gist.github.com/bbk-pij-2012-22/… 请询问任何具体的事情。不好意思推迟了!提前谢谢你。
-
哦,我在原始问题中提到的 3 个属性文件都只包含 1 个属性(some.property)。我究竟做错了什么! : >
-
已答复。如果您没有为测试共享源发明其他名称 - 根本原因在于客户端应用程序名称。
标签: java spring-boot docker-compose spring-cloud spring-cloud-config