zoukankan      html  css  js  c++  java
  • Springboot 注解之 @ConditionalOnProperty

     @ConditionalOnProperty 注解源码:

    @Retention(RetentionPolicy.RUNTIME)
    @Target({ ElementType.TYPE, ElementType.METHOD })
    @Documented
    @Conditional(OnPropertyCondition.class)
    public @interface ConditionalOnProperty {
    
    	String[] value() default {};
    
    	String prefix() default "";
    
    	String[] name() default {};
    
    	String havingValue() default "";
    
    	boolean matchIfMissing() default false;
    
    	boolean relaxedNames() default true;
    	
    }
    

    @ConditionalOnProperty 注解中这些属性是什么意思,作用是什么,我们分下面几种情况演示

    1、如果不给 @ConditionalOnProperty 注解赋值

    @Configuration
    @ConditionalOnProperty
    public class SpringbootConfig {
    
        @Bean("mango")
        public Mango mango(){
            return new Mango("mango","黄色",6.00);
        }
    
        @Bean("watermelon")
        public Watermelon watermelon(){
            return new Watermelon("Watermelon","原谅色",3.0);
        }
    }
    

    启动的时候就会报错,根据提示可以得出,必须要配置出 name 或 value 属性

    2、只配置 value 属性(如果只有一个 value 属性,那么 value 可以省略不写)

    @Configuration
    @ConditionalOnProperty(value="favourite-tag")
    public class SpringbootConfig {
    
        @Bean("mango")
        public Mango mango(){
            return new Mango("mango","黄色",6.00);
        }
    
        @Bean("watermelon")
        public Watermelon watermelon(){
            return new Watermelon("Watermelon","原谅色",3.0);
        }
    }

    如果你在 springboot 的配置文件 application.properties 中配置了 favourite-tag 这个节点,那么 @ConditionalOnProperty 这个注解的判断条件成立,这个类上面标注的@Configuration 注解才会生效

    下面这三种情况都成立

    // 经测试条件成立
    favourite-tag
    // 经测试条件成立
    favourite-tag=
    // 经测试条件成立
    favourite-tag=fruit
    

      

    3、prefix、name、havingValue

    @Configuration
    @ConditionalOnProperty(prefix = "xiaomaomao.favourite",name="fruit",havingValue = "watermelon")
    public class SpringbootConfig {
    
        @Bean("mango")
        public Mango mango(){
            return new Mango("mango","黄色",6.00);
        }
    
        @Bean("watermelon")
        public Watermelon watermelon(){
            return new Watermelon("Watermelon","原谅色",3.0);
        }
    }
    

    前缀为 xiaomaomao.favourite , 属性名称为 fruit ,那么拼接起来就是 xiaomaomao.favourite.fruit ,千万要注意 prefix 不能单独使用,它必须搭配 name 才代表一个完整的 value.

    havingValue 的意思是必须要有的值为 watermelon

    这里的意思是 application.properties 中必须要配置 xiaomaomao.favourite.fruit 标签,并且该标签的值必须为 watermelon ,否则判断条件不成立

    xiaomaomao.favourite.fruit=watermelon
    

      

    四、matchIfMissing

    如果 matchIfMissing=true ,那么就不管 application.properties 配置文件中有没有配置 server.error.whitelabel.enabled 标签,判断条件都成立

    @ConditionalOnProperty(prefix = "server.error.whitelabel", name = "enabled", matchIfMissing = true)
    

    例如,下面这个判断条件

    如果没有配置 xiaomaomao.favourite.fruit 标签,由于 matchIfMissing = true ,所以判断条件也是成立的

    但是如果配置了 xiaomaomao.favourite.fruit 标签,那么标签的值就必须为 watermelon

    @ConditionalOnProperty(prefix="xiaomaomao.favourite",name = "fruit",havingValue = "watermelon",matchIfMissing = true)
    

      

  • 相关阅读:
    新项目调试思路
    cmstop核心
    jquery获取li中的各项属性值attr
    mysql表设计
    SQLServer系统表使用简介(sysobjects、syscolumns、syscomments等)转载
    死锁查询和处理
    this 关键字的用法
    C# 线程
    C# WCF的通信模式
    C# WCF之用接口创建服务契约、部署及客户端连接
  • 原文地址:https://www.cnblogs.com/xiaomaomao/p/14012795.html
Copyright © 2011-2022 走看看