Spring Cloud Config Client - could not resolve placeholder
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
Related videos on Youtube
Kris Swat
Updated on June 04, 2022Comments
-
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 almost 5 yearsExactly. This is the most important part that the beginners often tend to miss.
-
Ankit Pandoh over 4 yearsYou 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 over 2 yearsIn 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