Spring Boot @Value SPEL注入yml配置缺省时设置默认值异常问题
问题原因
你当前使用的${}内写三目运算符的写法不符合Spring属性占位符的解析规则,Spring属性占位符仅支持${属性名:默认值}的原生默认值声明语法,你写的自定义三目逻辑在属性值存在时会被错误解析,导致始终返回默认值false。
解决方案
直接使用Spring属性占位符的原生默认值语法即可满足需求:当对应属性不存在、值为null时自动注入默认值,属性存在时读取配置的实际值。
修改后的注入代码如下:
@Value("${security.disable:false}") private Boolean securityDisable;
验证效果
- 当yml中
security.disable未配置、或配置值为null(即disable:后无内容)时,会自动注入默认值false - 当yml中配置
security.disable: true时,会正常读取配置值true注入
如果需要实现更复杂的判断逻辑才需要使用SpEL表达式,写法为将逻辑包裹在#{}中:
// 复杂逻辑场景示例,当前场景无需使用该写法 @Value("#{${security.disable:false}}") private Boolean securityDisable;
注意:yml中配置布尔值时无需添加引号,直接写
true/false即可避免类型转换问题。
内容的提问来源于stack exchange,提问作者VSVDev
相关产品推荐
相关产品推荐

