最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot中@ConditionalOnProperty的使用方法

 更新時(shí)間:2019年12月10日 08:32:26   作者:SECBRO2  
這篇文章主要給大家介紹了關(guān)于Spring Boot中@ConditionalOnProperty的使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

在Spring Boot的自動配置中經(jīng)??吹紷ConditionalOnProperty注解的使用,本篇文章帶大家來了解一下該注解的功能。下面話不多說了,來一起看看詳細(xì)的介紹吧。

Spring Boot中的使用

在Spring Boot的源碼中,比如涉及到Http編碼的自動配置、數(shù)據(jù)源類型的自動配置等大量的使用到了@ConditionalOnProperty的注解。

HttpEncodingAutoConfiguration類中部分源代碼:

@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(HttpProperties.class)
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
@ConditionalOnClass(CharacterEncodingFilter.class)
@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true)
public class HttpEncodingAutoConfiguration {
  // 省略內(nèi)部代碼
}

DataSourceConfiguration類中部分代碼:

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(org.apache.tomcat.jdbc.pool.DataSource.class)
@ConditionalOnMissingBean(DataSource.class)
@ConditionalOnProperty(name = "spring.datasource.type", havingValue = "org.apache.tomcat.jdbc.pool.DataSource",
    matchIfMissing = true)
static class Tomcat {
 // 省略內(nèi)部代碼
}

很顯然,以上兩個(gè)自動配置類中都通過@ConditionalOnProperty來控制自動配置是否生效,下面我們來了解一下它的源碼和具體使用。

@ConditionalOnProperty源碼說明

@ConditionalOnProperty注解類源碼如下:

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {
  // 數(shù)組,獲取對應(yīng)property名稱的值,與name不可同時(shí)使用
  String[] value() default {};
  // 配置屬性名稱的前綴,比如spring.http.encoding
  String prefix() default "";
  // 數(shù)組,配置屬性完整名稱或部分名稱
  // 可與prefix組合使用,組成完整的配置屬性名稱,與value不可同時(shí)使用
  String[] name() default {};
  // 可與name組合使用,比較獲取到的屬性值與havingValue給定的值是否相同,相同才加載配置
  String havingValue() default "";
  // 缺少該配置屬性時(shí)是否可以加載。如果為true,沒有該配置屬性時(shí)也會正常加載;反之則不會生效
  boolean matchIfMissing() default false;
}

其中在歷史版本中還存在一個(gè)relaxedNames屬性:

//是否可以松散匹配
boolean relaxedNames() default true;

最新版本中已經(jīng)不存在該屬性了。

通過注解ConditionalOnProperty上的@Conditional(OnPropertyCondition.class)代碼,可以看出ConditionalOnProperty屬于@Conditional的衍生注解。生效條件由OnPropertyCondition來進(jìn)行判斷。

使用方法

關(guān)于@ConditionalOnProperty的使用方法,我們在上面的Spring Boot中的使用已經(jīng)看到。

@ConditionalOnProperty的核心功能是通過屬性name以及havingValue來實(shí)現(xiàn)的。

首先看matchIfMissing屬性,用來指定如果配置文件中未進(jìn)行對應(yīng)屬性配置時(shí)的默認(rèn)處理:默認(rèn)情況下matchIfMissing為false,也就是說如果未進(jìn)行屬性配置,則自動配置不生效。如果matchIfMissing為true,則表示如果沒有對應(yīng)的屬性配置,則自動配置默認(rèn)生效。

下面看name屬性,name用來從application.properties中讀取某個(gè)屬性值。比如上面Tomcat的自動配置在配置文件為:

spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource

在matchIfMissing為false時(shí),如果name值為空,則返回false;如果name不為空,則將該值與havingValue指定的值進(jìn)行比較,如果一樣則返回true,否則返回false。返回false也就意味著自動配置不會生效。

但是如果看HttpEncodingAutoConfiguration類上的屬性配置發(fā)現(xiàn)并沒有完全按照上面所說的name和havingValue配合使用。它是通過“prefix+value”作為屬性的名稱來進(jìn)行配置:

spring.http.encoding.enabled=true

其中prefix指定了配置的統(tǒng)一前綴“spring.http.encoding”,而value指定了具體的屬性名稱為“enabled”。這里并沒有設(shè)置havingValue的值,如果havingValue未指定值,默認(rèn)情況下在屬性配置中設(shè)置的值為true則生效(如上配置),false則不生效。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • java實(shí)現(xiàn)mysql操作類分享 java連接mysql

    java實(shí)現(xiàn)mysql操作類分享 java連接mysql

    這篇文章主要介紹了java實(shí)現(xiàn)的mysql操作類示例,大家在連接數(shù)據(jù)的時(shí)候可以直接使用了
    2014-01-01
  • Java concurrency之CountDownLatch原理和示例_動力節(jié)點(diǎn)Java學(xué)院整理

    Java concurrency之CountDownLatch原理和示例_動力節(jié)點(diǎn)Java學(xué)院整理

    CountDownLatch是一個(gè)同步輔助類,在完成一組正在其他線程中執(zhí)行的操作之前,它允許一個(gè)或多個(gè)線程一直等待。 下面通過本文給大家分享Java concurrency之CountDownLatch原理和示例,需要的的朋友參考下吧
    2017-06-06
  • Java線性表的順序表示及實(shí)現(xiàn)

    Java線性表的順序表示及實(shí)現(xiàn)

    這篇文章主要介紹了Java線性表的順序表示及實(shí)現(xiàn),順序表是在計(jì)算機(jī)內(nèi)存中以數(shù)組的形式保存的線性表,線性表的順序存儲是指用一組地址連續(xù)的存儲單元依次存儲線性表中的各個(gè)元素、使得線性表中在邏輯結(jié)構(gòu)上相鄰的數(shù)據(jù)元素存儲在相鄰的物理存儲單元中
    2022-07-07
  • ThreadLocal工作原理及用法案例

    ThreadLocal工作原理及用法案例

    本文詳細(xì)講解了ThreadLocal工作原理及用法案例,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • SpringBoot下無節(jié)制和數(shù)據(jù)庫建立連接的問題及解決方法

    SpringBoot下無節(jié)制和數(shù)據(jù)庫建立連接的問題及解決方法

    本文介紹了無節(jié)制建立MySQL連接的危害,包括數(shù)據(jù)庫服務(wù)端資源耗盡、應(yīng)用端性能劣化和監(jiān)控與運(yùn)維困境,提出了系統(tǒng)性解決方案,包括連接池標(biāo)準(zhǔn)化配置、代碼規(guī)范與防御式編程、全鏈路監(jiān)控體系和架構(gòu)級優(yōu)化,感興趣的朋友一起看看吧
    2025-03-03
  • Java經(jīng)緯度小數(shù)與度分秒相互轉(zhuǎn)換工具類示例詳解

    Java經(jīng)緯度小數(shù)與度分秒相互轉(zhuǎn)換工具類示例詳解

    這篇文章主要介紹了Java經(jīng)緯度小數(shù)與度分秒相互轉(zhuǎn)換工具類,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 關(guān)于Java錯(cuò)誤提示之找不到或無法加載主類的問題及正確處理方法

    關(guān)于Java錯(cuò)誤提示之找不到或無法加載主類的問題及正確處理方法

    當(dāng)我們在初學(xué)Java的是時(shí)候,類文件中是不設(shè)定包名(package)的,這種情況下注意classpath,基本上沒有問題,?本文主要說明classpath和系統(tǒng)環(huán)境變量PATH都沒問題的情況下出錯(cuò)原因和正確處理方法,感興趣的朋友一起看看吧
    2022-01-01
  • SpringBoot整合Caffeine實(shí)現(xiàn)本地緩存的實(shí)踐分享

    SpringBoot整合Caffeine實(shí)現(xiàn)本地緩存的實(shí)踐分享

    緩存是提升系統(tǒng)性能的一個(gè)不可或缺的工具,通過緩存可以避免大部分重復(fù)的請求到數(shù)據(jù)庫層,減少IO鏈接次數(shù),提升整體的響應(yīng)速率,本地緩存中比較常見的比如 Caffeine 緩存,這篇文章將結(jié)合具體的 Springboot 項(xiàng)目搭配 Caffeine 實(shí)現(xiàn)本地緩存的各種使用方式
    2024-07-07
  • redis與ssm整合方法(mybatis二級緩存)

    redis與ssm整合方法(mybatis二級緩存)

    本文給大家介紹redis與ssm整合方法(mybatis二級緩存)。主要是利用redis去做mybatis的二級緩存,mybaits映射文件中所有的select都會刷新已有緩存,如果不存在就會新建緩存,所有的insert,update操作都會更新緩存
    2017-12-12
  • 關(guān)于Arrays.sort()使用的注意事項(xiàng)

    關(guān)于Arrays.sort()使用的注意事項(xiàng)

    這篇文章主要介紹了關(guān)于Arrays.sort()使用的注意事項(xiàng),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05

最新評論

新田县| 松阳县| 乐平市| 米林县| 互助| 临清市| 社会| 砀山县| 绥化市| 东山县| 洪江市| 荥阳市| 理塘县| 保亭| 黑龙江省| 天长市| 辽阳市| 元阳县| 始兴县| 佳木斯市| 宁河县| 张家港市| 石城县| 平山县| 长葛市| 自治县| 铜川市| 芦溪县| 同德县| 陇川县| 繁昌县| 内丘县| 墨脱县| 阜城县| 宾阳县| 巩义市| 博乐市| 溧阳市| 武穴市| 林周县| 乌兰县|