Initially, I have the following spec:
@Value("#{props.isFPL}")
private boolean isFPL=false;
This works fine correctly getting the value from the property file:
isFPL = true
However, the following expression with default results in the error:
@Value("#{props.isFPL:false}")
private boolean isFPL=false;
Expression parsing failed; nested exception is org.springframework.expression.spel.SpelParseException: EL1041E:(pos 28): After parsing a valid expression, there is still more data in the expression: 'colon(:)'
I also tried to use $ instead of #.
@Value("${props.isFPL:true}")
private boolean isFPL=false;
Then the default value in annotation works fine but I did not get the correct value from the Properties file:
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;
}