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'}")
我们需要“逻辑或”
  1. 首先一个类是不能标注多个相同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}}")