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)

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM