最初,我有以下规范:
@Value("#{props.isFPL}")
private boolean isFPL=false;
这样可以正确地从属性文件中获取值:
isFPL = true
但是,以下表达式使用默认值会导致错误:
@Value("#{props.isFPL:false}")
private boolean isFPL=false;
表达式解析失败;嵌套异常为org.springframework.expression.spel.SpelParseException:EL 1041 E:(位置28):解析一个有效的表达式后,表达式中还有更多的数据:'colon(:)'
我也试着用$代替#。
@Value("${props.isFPL:true}")
private boolean isFPL=false;
然后注解中的默认值可以正常工作,但我没有从Properties文件中获得正确的值:
8条答案
按热度按时间gojuced71#
尝试使用
$
,如下所示:还要确保将
ignore-resource-no-found
设置为 true,这样如果属性文件丢失,将采用 default 值。如果使用基于XML的配置,请将以下内容放入上下文文件中:
如果使用Java配置:
f8rj6qna2#
对于
int
类型变量:**注意:**冒号前 * 没有空格,冒号后 * 有额外空格。
gzjq41n43#
问题的确切答案取决于参数的***类型***。
对于'String'参数,您的示例代码工作正常:
对于其他类型(比如你的问题中的boolean),应该这样写:
或对于“整数”:
4szc88ey4#
您的Spring应用程序上下文文件是否包含多个propertyPlaceholder beans,如下所示:
如果是,则属性查找:props.isFPL 只会在第一个属性文件(.local.properties)中发生,如果未找到属性,则默认值(true)将生效,第二个属性文件(config.properties)将被有效忽略。
s5a0g9ez5#
对于String,你可以像这样默认为null:
qgzx9mmu6#
这取决于您如何加载属性,如果您使用类似
<context:property-placeholder location="classpath*:META-INF/spring/*.properties" />
那么
@Value
应该是这样的roejwanj7#
如果默认值是字符串,则按如下方式指定:
6ovsh4lw8#
这种定义默认值的方式只有在@Value注解中写入“value=...”时才有效。例如
不工作:@Value(“${testUrl:some-url}”//无论您在配置文件中做什么,都会始终设置“some-url”。
Works:@Value(value =“${testUrl:some-url}”//仅当配置文件中缺少testUrl属性时,才会设置“some-url”。