I have following configuration file:
@Configuration
public class PropertyPlaceholderConfigurerConfig {
@Value(\"${property:defaultValue}\")
private
From Spring JavaDoc:
In order to resolve ${...} placeholders in definitions or @Value annotations using properties from a PropertySource, one must register a PropertySourcesPlaceholderConfigurer. This happens automatically when using in XML, but must be explicitly registered using a static @Bean method when using @Configuration classes. See the "Working with externalized values" section of @Configuration's javadoc and "a note on BeanFactoryPostProcessor-returning @Bean methods" of @Bean's javadoc for details and examples.
So, you are trying to use a placeholder in the code block required to enable placeholder processing.
As @M.Deinum mentioned, you should use a PropertySource (default or custom implementation).
Example below shows how to use properties in a PropertySource annotation as well as how to inject properties from the PropertySource in a field.
@Configuration
@PropertySource(
value={"classpath:properties/${property:defaultValue}.properties"},
ignoreResourceNotFound = true)
public class ConfigExample {
@Value("${propertyNameFromFile:defaultValue}")
String propertyToBeInjected;
/**
* Property placeholder configurer needed to process @Value annotations
*/
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}