javaspringpropertiesannotations

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


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:


Solution

  • 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;
     }