题:
我如何使用Spring表达式语言来检查2个布尔属性是正确的?
例如,检查单属性为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'")
这句法显得扑朔迷离的人读取代码,它似乎是一个哈克的解决方案。还有一些边缘情况下的解决方案也将失败。我想找到合适的方法来检查两个独立的属性,而无需串接值。
注:也仅仅是明确的,答案是不是你可以轻松地从我所看到的搜索。看起来这将是一个非常简单的答案,但它证明是相当渺茫。
注释@ConditionalOnProperty
和@ConditionalOnExpression
都没有的java.lang.annotation.Repeatable
注释,所以你不能就能够只添加多个注释检查多个属性。
下面的语法已经过测试,工作原理:
解决方案有两个属性
@ConditionalOnExpression("${properties.first.property.enable:true} && ${properties.second.property.startServer:false}")
请注意以下几点:
它允许有不同的值,并可以延伸到多个属性的多个属性。
如果您想查询更多然后2倍的值仍然保持可读性,你可以用你正在评估不同条件之间的连接符:
解超过2种性质
@ConditionalOnExpression("${properties.first.property.enable:true} " +
"&& ${properties.second.property.enable:true} " +
"&& ${properties.third.property.enable:true}")
缺点是你不能使用matchIfMissing参数,你将能够使用@ConditionalOnProperty
注释时,所以你必须确保属性存在于的.properties或YAML文件,为您的所有配置文件/环境或者仅仅依靠默认值
至于我记得,你可以使用这种表达:
@ConditionalOnExpression("'${com.property1}'.equals('${com.property2}')")
进一步阅读下面是link
如果它是有帮助的,请你评论,使我的困惑也可能会被清除。