java Spring Boot SpEL ConditionalOnExpression检查多个属性
问题:
如何使用Spring表达式语言检查两个布尔属性是否为真
例如,检查单个属性是否为true将使用以下语法:
示例
@ConditionalOnExpression("${property.from.properties.file}")
检查property1 == true && property2 == false
的语法是什么?其中属性可能具有不同的值
类似问题的答案是:How to check two condition while using @ConditionalOnProperty or @ConditionalOnExpression将两个字符串连接在一起,并执行如下检查:
串联解决方案
@ConditionalOnExpression("'${com.property1}${com.property2}'=='value1value2'")
对于阅读该代码的人来说,这种语法似乎令人困惑,而且似乎是一种黑客解决方案。在某些边缘情况下,解决方案也会失败。 我想找到一种正确的方法来检查两个独立的属性,而不必连接这些值
注意: 同样要明确的是,答案并不是你能从我的所见所闻中轻易找到的。这似乎是一个非常简单的答案,但事实证明它相当难以捉摸
# 1 楼答案
据我记忆所及, 你可以用这样的表达:
供进一步阅读 这是link
如果有帮助,请发表评论,这样我的困惑也会得到澄清
# 2 楼答案
注释
@ConditionalOnProperty
和@ConditionalOnExpression
都没有java.lang.annotation.Repeatable
注释,因此您不能只添加多个注释来检查多个属性以下语法已经过测试,并且可以正常工作:
两个属性的解决方案
请注意以下几点:
它允许多个具有不同值的属性,并且可以扩展到多个属性
如果要检查2个以上的值并仍保持可读性,可以在要计算的不同条件之间使用串联运算符:
两个以上属性的解决方案
缺点是不能像使用
@ConditionalOnProperty
注释时那样使用matchIfMissing参数,因此必须确保属性存在于中。所有配置文件/环境的属性或YAML文件,或仅依赖默认值