代码之家  ›  专栏  ›  技术社区  ›  Daisy Day

Spring Cloud配置服务器无法解析占位符

  •  0
  • Daisy Day  · 技术社区  · 8 年前

    我在堆栈中添加了spring cloud配置服务器,希望为不同的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 回复  |  直到 8 年前
        1
  •  1
  •   nmyk    8 年前

    您在客户端应用程序中设置的凭据不正确。

    应该是

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

    而不是 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