ConditionalOnProperty的使用

 

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Documented
@Conditional({OnPropertyCondition.class})
public @interface ConditionalOnProperty {
    String[] value() default {}; //數組,獲取對應property名稱的值,與name不可同時使用

    String prefix() default "";//property名稱的前綴,可有可無

    String[] name() default {};//數組,property完整名稱或部分名稱(可與prefix組合使用,組成完整的property名稱),與value不可同時使用

    String havingValue() default "";//可與name組合使用,比較獲取到的屬性值與havingValue給定的值是否相同,相同才加載配置

    boolean matchIfMissing() default false;//缺少該property時是否可以加載。如果爲true,沒有該property也會正常加載;反之報錯

    boolean relaxedNames() default true;//是否可以鬆散匹配,至今不知道怎麼使用的
}

 

@Configuration
@ConditionalOnProperty(value = "parentName.sonName")
public class parentNameConfig {
}
.yml配置如下:
parentName:
    sonName: true     //正常
parentName:
    sonName:          //正常,空字符時	
parentName:
    sonName: false 	  //失敗
parentName:
    sonName: null	  //正常
parentName:
    sonName: 123	  //正常
	
把第二行換成:
@ConditionalOnProperty(value = "parentName.sonName",havingValue = "123")	
.yml配置如下:
parentName:
    sonName: 123      //正常
parentName:
    sonName: 1234	  //失敗
parentName:
    sonName: false	  //失敗
	
把第二行換成:
@ConditionalOnProperty(value = "parentName.sonName",havingValue = "false")	
.yml配置如下:
parentName:
    sonName: false	  //正常
	
把第二行換成:
@ConditionalOnProperty(prefix = "parentName",name = "sonName",havingValue = "123")
.yml配置如下:
parentName:
    sonName: 123      //正常	
parentName:
    sonName: 1234	  //失敗,與havingValue給定的值不一致
	
把第二行換成:
@ConditionalOnProperty(prefix = "parentName",name = "sonName",havingValue = "123",matchIfMissing = true)
.yml配置如下:	
不配置相關參數       //正常,當matchIfMissing = true時,即使沒有該parentName.sonName屬性也會加載正常


把第二行換成:
@ConditionalOnProperty(prefix = "parentName",name = "sonName",havingValue = "123",matchIfMissing = false) //這裏matchIfMissing默認爲false,寫不寫都行
.yml配置如下:	 
不配置相關參數       //失敗,當matchIfMissing = false時,必須要有對應的property
parentName:
    sonName: 123     //正常	

把第二行換成:
@ConditionalOnProperty(prefix = "parentName.", name = "sonName")//prefix帶了.(點)
.yml配置如下:	 
parentName:
    sonName: true    //正常
parentName:
    sonName: 123	 //正常
	
把第二行換成:	
@ConditionalOnProperty(prefix = "parentName",value = {"sonName2"},name = {"sonName"})
.yml配置如下:	 
parentName:
    sonName: true    //項目Debug啓動失敗,The name and value attributes of @ConditionalOnProperty are exclusive
	                 //@ConditionalOnProperty的name和value屬性是互斥的,不能同時出現

把第二行換成:	
@ConditionalOnProperty(prefix = "parentName",name = {"sonName"})	
.yml配置如下:	 
parentName:
    sonName: true    //正常	

把第二行換成:
@ConditionalOnProperty(prefix = "parentName",name = {"sonName","flag"})  //name中的屬性需要兩個都存在且都不爲false纔會加載正常
.yml配置如下:	 
parentName:
    sonName: true
    flag: true       //正常
parentName:
    sonName: true
    flag: 123        //正常
parentName:
    sonName: true
    flag: false      //失敗	
parentName:
    sonName: false 
    flag: false      //失敗	

把第二行換成:
@ConditionalOnProperty(prefix = "parentName", name = {"sonName", "flag"}, havingValue = "false")
parentName:
    sonName: false 
    flag: false      //正常	

把第二行換成:
@ConditionalOnProperty(prefix = "parentName", name = {"sonName", "flag"}, havingValue = "123")//parentName.sonName和parentName.flag的值都要與havingValue的一致纔行
parentName:
    sonName: 123
    flag: 1234       //失敗	
parentName:
    sonName: 123
    flag: 123	     //正常
parentName:
    sonName: 123	 //失敗,缺少parentName.flag
	
把第二行換成:	
@ConditionalOnProperty(prefix = "parentName", name = {"sonName", "flag"}, havingValue = "123",matchIfMissing = true)//matchIfMissing = true允許缺少	
parentName:
    sonName: 123	 //正常	
.yml配置如下:	 
不配置相關參數      //正常	

把第二行換成:	
@ConditionalOnProperty(prefix = "parentName", name = {"sonName", "flag"}, havingValue = "123")
.yml配置如下:	 
不配置相關參數      //失敗	

歡迎關注我的公衆號

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章