Spring注解之-@ConditionalOnExpression表达式
@ConditionalOnExpression("'true")
当括号中的内容为true时,使用该注解的类被实例化,支持语法如下:
@ConditionalOnExpression("${mq.cumsumer.enabled}==1&&${rabbitmq.comsumer.enabled:true}")
@ConditionalOnExpression("'${mq.comsumer}'.equals('rabbitmq')")
@ConditionalOnExpression("'${application.customize}'.equals('EDGE')||${app.chain.enabled:'false'}")
我们需要“逻辑或”
- 首先一个类是不能标注多个相同annotation的,编译通不过。
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
@ConditionalOnExpression("${app.initialize.dictionary:false} || ${app.initialize.all:false}")
public class DictionaryInitializer implements CommandLineRunner{}
精益无止境,其实还有更灵活的配置方式:除了dictionary其他都导入:
@ConditionalOnExpression("${app.initialize.dictionary:${app.initialize.all:false}}")