如何在Spring @Value注释中正确指定默认值?

2022-08-31 20:35:10

最初,我有以下规格:

@Value("#{props.isFPL}")
private boolean isFPL=false;

这可以正常工作,从属性文件中获取值:

isFPL = true

但是,以下具有默认值的表达式会导致错误:

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

表达式分析失败;嵌套的异常是 org.springframework.expression.spel.SpelParseException: EL1041E:(pos 28):解析有效表达式后,表达式中还有更多数据:'colon(:)'

我还尝试使用$而不是#。

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

然后注释中的默认值工作正常,但我没有从属性文件中获得正确的值:


答案 1

请尝试如下操作:$

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

此外,请确保将 设置为 true,以便在缺少属性文件时,将采用默认值ignore-resource-no-found

如果使用基于 XML 的配置,请将以下内容放在上下文文件中:

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

如果使用 Java 配置:

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

    return p;
 }

答案 2

对于类型变量:int

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

注意:冒号没有空格,但冒号有一个额外的空格。