Spring 云配置服务器无法解析占位符
Spring Cloud Config Server Could not resolve placeholder
我已将 spring-cloud-config-server 添加到我的堆栈中,希望为不同的 spring 配置文件(即开发、暂存和生产)加载不同的配置集。
我的配置服务器应用程序在端口 8888 上启动,直接从私有 gitlab 存储库获取配置并且具有安全性。我通过手动点击它并检查是否返回了正确的属性来测试它。到目前为止一切顺利。
我将有几个 'client' 应用程序,我想使用我的配置服务器的属性,但现在我只尝试一个。为了测试它,我放了一个
@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}"
我在客户端应用程序中将活动配置文件设置为 'development'。配置服务器上的属性文件命名为:
myapp-development.properties
myapp-staging.properties
myapp-production.properties
我当然希望客户端应用程序从服务器获取配置(我可以看到发生了),然后 属性 在客户端应用程序启动时可用,但这并没有出现是这样的。是不是像在值注解中指定一个默认值那么简单?还是我忽略了更基本的东西?我首先遵循了本指南,并且我的配置服务器指向 git 存储库,正如我上面提到的:
http://www.baeldung.com/spring-cloud-configuration
提前致谢。
您在客户端应用程序中设置的凭据不正确。
应该是
spring.cloud.config.username=myConfigServerUserName
spring.cloud.config.password=myConfigServerPassword
而不是 spring.security.user.name
和 spring.security.user.password
(在配置服务器应用程序中使用)。
我已将 spring-cloud-config-server 添加到我的堆栈中,希望为不同的 spring 配置文件(即开发、暂存和生产)加载不同的配置集。
我的配置服务器应用程序在端口 8888 上启动,直接从私有 gitlab 存储库获取配置并且具有安全性。我通过手动点击它并检查是否返回了正确的属性来测试它。到目前为止一切顺利。
我将有几个 'client' 应用程序,我想使用我的配置服务器的属性,但现在我只尝试一个。为了测试它,我放了一个
@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}"
我在客户端应用程序中将活动配置文件设置为 'development'。配置服务器上的属性文件命名为:
myapp-development.properties
myapp-staging.properties
myapp-production.properties
我当然希望客户端应用程序从服务器获取配置(我可以看到发生了),然后 属性 在客户端应用程序启动时可用,但这并没有出现是这样的。是不是像在值注解中指定一个默认值那么简单?还是我忽略了更基本的东西?我首先遵循了本指南,并且我的配置服务器指向 git 存储库,正如我上面提到的:
http://www.baeldung.com/spring-cloud-configuration
提前致谢。
您在客户端应用程序中设置的凭据不正确。
应该是
spring.cloud.config.username=myConfigServerUserName
spring.cloud.config.password=myConfigServerPassword
而不是 spring.security.user.name
和 spring.security.user.password
(在配置服务器应用程序中使用)。