Open TFdream opened 2 years ago
最近在开发 spring-boot-starter时 涉及到多个条件进行 OR 逻辑运算,而ConditionalOnProperty默认是支持 “多个条件逻辑” AND运算;
例如:
@ConditionalOnProperty(name={"app.initialize.dictionary","app.initialize.all"}, havingValue="true")
这显然不符合我们的要求,我们需要“逻辑或”
解决方案有2个:
方案一
class DicOrAllCondition extends AnyNestedCondition { public DicOrAllCondition() { super(ConfigurationPhase.PARSE_CONFIGURATION); } @ConditionalOnProperty(name = "app.initialize.dictionary", value = "true") static class DicCondition { } @ConditionalOnProperty(name = "app.initialize.all", value = "true") static class AllCondition { } }
用法:
@Order(1) @Component @Conditional(DicOrAllCondition.class) public class DictionaryInitializer implements CommandLineRunner{ }
方案二
@Order(1) @Component @ConditionalOnExpression("${app.initialize.dictionary:false} || ${app.initialize.all:false}") public class DictionaryInitializer implements CommandLineRunner{ }
application.properties如下:
app.initialize.all=true app.initialize.dictionary=false
还有更灵活的配置方式:
@ConditionalOnExpression("${app.initialize.dictionary:${app.initialize.all:false}}")
最近在开发 spring-boot-starter时 涉及到多个条件进行 OR 逻辑运算,而ConditionalOnProperty默认是支持 “多个条件逻辑” AND运算;
例如:
这显然不符合我们的要求,我们需要“逻辑或”
解决方案有2个:
方案一
用法:
方案二
application.properties如下:
还有更灵活的配置方式: