Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Cloud Config Client - could not resolve placeholder

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?

like image 799
Kris Swat Avatar asked Mar 24 '17 13:03

Kris Swat


2 Answers

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

bootstrap.yml gets loaded before application.yml

like image 163
Kris Swat Avatar answered Sep 21 '22 19:09

Kris Swat


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.

like image 32
jay chang Avatar answered Sep 20 '22 19:09

jay chang