ana*_*ocs 10 java spring spring-el spring-boot
题:
如何使用Spring Expression Language检查2个布尔属性是否为真?
例如,检查单个属性是否为true将使用以下语法:
例
@ConditionalOnExpression("${property.from.properties.file}")
Run Code Online (Sandbox Code Playgroud)
检查的语法是property1 == true && property2 == false
什么?属性可能具有不同的值.
来自类似问题的答案:如何在使用@ConditionalOnProperty或@ConditionalOnExpression时将两个字符串连接在一起并执行检查,如下所示:
连接解决方案
@ConditionalOnExpression("'${com.property1}${com.property2}'=='value1value2'")
Run Code Online (Sandbox Code Playgroud)
对于那些阅读该代码的人来说,这种语法似乎令人困惑,这似乎是一个hacky解决方案.有一些边缘情况解决方案也会失败.我想找到检查两个单独属性而不连接值的正确方法.
注意: 同样要清楚,答案不是你可以从我看到的内容中轻松搜索到的.这似乎是一个非常简单的答案,但事实证明这是相当难以捉摸的.
ana*_*ocs 19
注释@ConditionalOnProperty
和@ConditionalOnExpression
两者都没有java.lang.annotation.Repeatable
注释,因此您无法仅添加多个注释来检查多个属性.
以下语法已经过测试并且有效:
两个属性的解决方案
@ConditionalOnExpression("${properties.first.property.enable:true} && ${properties.second.property.startServer:false}")
Run Code Online (Sandbox Code Playgroud)
请注意以下事项:
它允许具有不同值的多个属性,并且可以扩展到多个属性.
如果要检查多于2个值并仍保持可读性,可以在要评估的不同条件之间使用串联运算符:
超过2个属性的解决方案
@ConditionalOnExpression("${properties.first.property.enable:true} " +
"&& ${properties.second.property.enable:true} " +
"&& ${properties.third.property.enable:true}")
Run Code Online (Sandbox Code Playgroud)
缺点是您不能像使用@ConditionalOnProperty
注释那样使用matchIfMissing参数,因此您必须确保属性存在于所有配置文件/环境的.properties或YAML文件中,或者仅依赖于默认值值
据我记得,你可以使用这种表达方式:
@ConditionalOnExpression("'${com.property1}'.equals('${com.property2}')")
Run Code Online (Sandbox Code Playgroud)
如需进一步阅读,请点击链接
如果有帮助,请发表评论,以便我的困惑也能得到澄清。
归档时间: |
|
查看次数: |
16239 次 |
最近记录: |