How to correctly specify a default value in the Spring @Value annotation?

Does your Spring application context file contains more than one propertyPlaceholder beans like below:

<context:property-placeholder ignore-resource-not-found="true" ignore-unresolvable="true" location="classpath*:/*.local.properties" />
<context:property-placeholder location="classpath:/config.properties" />

If so, then property lookup for: props.isFPL will only take place for the first property file (.local.properties), if property not found, the default value (true) will take effect and the second property file (config.properties) is effectively ignored for this property.


For int type variable:

@Value("${my.int.config: #{100}}")
int myIntConfig;

Note: there is no space before the colon, but an extra space after the colon.


For a String you can default to null like so:

public UrlTester(@Value("${testUrl:}") String url) {
    this.url = url;
}

Try with $ as follows:

@Value("${props.isFPL:true}")
private boolean isFPL=false;

Also make sure you set the ignore-resource-no-found to true so that if the property file is missing, the default value will be taken.

Place the following in the context file if using XML based configuration:

<context:property-placeholder ignore-resource-not-found="true"/>

If using Java configurations:

 @Bean
 public static PropertySourcesPlaceholderConfigurer   propertySourcesPlaceholderConfigurer() {
     PropertySourcesPlaceholderConfigurer p =  new PropertySourcesPlaceholderConfigurer();
     p.setIgnoreResourceNotFound(true);

    return p;
 }