注释和两者都没有注释,因此您无法仅添加多个注释来检查多个属性。@ConditionalOnProperty
@ConditionalOnExpression
java.lang.annotation.Repeatable
以下语法已经过测试并有效:
两个属性的解决方案
@ConditionalOnExpression("${properties.first.property.enable:true} && ${properties.second.property.startServer:false}")
请注意以下几点:
- 您需要使用冒号表示法来指示表达式语言语句中属性的默认值
- 每个属性都位于单独的表达式语言块 ${} 中
- && 运算符在 SpEL 块之外使用
它允许具有不同值的多个属性,并且可以扩展到多个属性。
如果要检查 2 个以上的值,同时仍保持可读性,则可以在要评估的不同条件之间使用串联运算符:
多个属性的解决方案
@ConditionalOnExpression("${properties.first.property.enable:true} " +
"&& ${properties.second.property.enable:true} " +
"&& ${properties.third.property.enable:true}")
缺点是不能像使用注释时那样使用 matchIfMissing 参数,因此您必须确保属性存在于所有配置文件/环境的 .properties 或 YAML 文件中,或者只是依赖于默认值@ConditionalOnProperty
从这里获取 Spring Boot SpEL ConditionalOnExpression 检查多个属性