Spring Cloud Config Client - could not resolve placeholder

14,426

Solution 1

Very important, the client application name needs to be the same as the properties name in the repository.For example,your config client application name is config-client,then your properties file in your repository should be config-client-dev.properties.Or you will get the Could not resolve placeholder ${xxx} error.

Solution 2

Resolved - Changed cloud client project application.yml filename to bootstrap.yml port 9000 of server works

bootstrap.yml gets loaded before application.yml

Share:
14,426

Related videos on Youtube

Kris Swat
Author by

Kris Swat

Updated on June 04, 2022

Comments

  • Kris Swat
    Kris Swat almost 2 years

    I am getting the below error

    Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'rate' in string value "${rate}"
        at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174) ~[spring-core-4.3.5.RELEASE.jar:4.3.5.RELEASE]
        at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126) ~[spring-core-4.3.5.RELEASE.jar:4.3.5.RELEASE]
    

    The spring boot version used is

    <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.4.3.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    

    The yml file of server is

    server:
      port: 9000
    spring:
      cloud:
        config:
          server:
            git:
              uri: https://github.com/kswat/microservices
              search-paths:
                - 'station*'
    

    The server starts fine and at port 9000.

    Client project: Using same version of spring boot.

    spring:
      application:
        name: s1rates
      profiles:
        active: default 
      cloud:
        config:
          uri: http://localhost:9000
          enabled: true
    

    Controller code:

    @RestController
    public class RateController {
    
        @Value("${rate}")
        String rate;
    
        @RequestMapping("/rate")
        public String getRate(){        
            return rate;        
        }
    
    }
    

    Is there limitation on port 8888? why my client starts with looking for 8888

     :: Spring Boot ::        (v1.4.3.RELEASE)
    
    2017-03-24 13:04:51.348  INFO 1048 --- [           main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: http://localhost:8888
    2017-03-24 13:04:52.479  WARN 1048 --- [           main] c.c.c.ConfigServicePropertySourceLocator : Could not locate PropertySource: I/O error on GET request for "http://localhost:8888/s1rates/default": Connection refused: connect; nested exception is java.net.ConnectException: Connection refused: connect
    2017-03-24 13:04:52.483  INFO 1048 --- [           main] c.b.samples.M2ConfigclientApplication    : The following profiles are active: default
    2017-03-24 13:04:52.518  INFO 1048 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@e84a8e1: startup date [Fri Mar 24 13:04:52 GMT 2017]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@70325e14
    2017-03-24 13:04:53.492  WARN 1048 --- [           main] o.s.c.a.ConfigurationClassPostProcessor  : Cannot enhance @Configuration bean definition 'refreshScope' since its singleton instance has been created too early. The typical cause is a non-static @Bean method with a BeanDefinitionRegistryPostProcessor return type: Consider declaring such methods as 'static'.
    2017-03-24 13:04:53.657  INFO 1048 --- [           main] o.s.cloud.context.scope.GenericScope     : BeanFactory id=d17fb23f-878c-3e56-87f0-af48d4c36965
    2017-03-24 13:04:53.743  INFO 1048 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [class org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$4e824d73] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
    2017-03-24 13:04:54.178  INFO 1048 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
    2017-03-24 13:04:54.194  INFO 1048 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
    

    If I use 8888 in config server, then client works cleanly, without exception. What is 8888 magic and why I have to stick to it? Is this boot version issue or my mistake?

  • Sen
    Sen almost 5 years
    Exactly. This is the most important part that the beginners often tend to miss.
  • Ankit Pandoh
    Ankit Pandoh over 4 years
    You missed the profile. Since you are naming your properties file as *-dev.properties. You have to define 'spring.profiles.active=dev' to pick up the dev properties file.
  • Kris Swat
    Kris Swat over 2 years
    In the latest version 2020 +, you need this dependency to enable application to look for bootstrap.yml/properties. But original issue is bootstrap itself does not exist.. so can say only a little related to OP