我正在寻找configurationOnProperty
用法,其中我可以指定考虑多个值,如下所示
例如:@ConditionalOnProperty(value = "test.configname", havingValue = "value1" or "value2")
或
我想知道是否可以使用havingValue != "value3"
条件指定confiugrationOnProperty
例如:@ConditionalOnProperty(value = "test.configname", havingValue != "value3")
请让我知道是否有办法在spring boot
配置中实现上述任一项。
4条答案
按热度按时间hc2pp10m1#
Sping Boot 提供
AnyNestedCondition
用于创建一个条件,当任何嵌套条件匹配时,该条件将匹配。它还分别提供AllNestedConditions
和NoneNestedConditions
用于匹配所有嵌套条件或没有嵌套条件匹配。对于您想要匹配
value1
或value2
的值的特定情况,您将创建如下AnyNestedCondition
:然后将其用于
@Conditional
,例如:如嵌套条件注解的javadoc所示(链接到上面),嵌套条件可以是任何类型,在这个特定的例子中,它们不需要都是同一类型。
dxxyhpgq2#
注解
@ConditionalOnProperty
和@ConditionalOnExpression
都没有java.lang.annotation.Repeatable
注解,因此您无法仅添加多个注解来检查多个属性。下面的语法已经过测试并且有效:
请注意以下事项:
它允许多个属性具有不同的值,并可以扩展到多个属性。
如果要检查2个以上的值并仍保持可读性,可以在要计算的不同条件之间使用串联运算符:
缺点是您不能像使用
@ConditionalOnProperty
注解时那样使用matchIfMissing参数,因此您必须确保所有配置文件/环境的 *. properties * 或 * YAML * 文件中都存在这些属性,或者仅依赖缺省值从此处获取Spring Boot SpEL ConditionalOnExpression检查多个属性
ttygqcqt3#
我正在寻找
configurationOnProperty
用法,在这里我可以指定考虑多个值您可以使用
Spring 4.0
的Condition interface。这个接口有一个可以使用的方法
matches(...)
。然后在
@Configuration
中使用TestCondition
,如下所示:我想知道是否可以在havingValue!="value3"的条件下指定configrationOnProperty
然后像这样使用它:
nlejzf6q4#
要具有复杂条件,可以使用
@ConditionalOnExpression
并在其中使用SpEl查询,如或使用
要了解更多信息,请查看https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/expressions.html和https://www.baeldung.com/spring-conditional-annotations