欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Boot中@ConditionalOnProperty的使用方法

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

前言

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

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 {
  // 省略內部代碼
}

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 {
 // 省略內部代碼
}

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

@ConditionalOnProperty源碼說明

@ConditionalOnProperty注解類源碼如下:

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

其中在歷史版本中還存在一個relaxedNames屬性:

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

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

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

使用方法

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

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

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

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

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

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

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

spring.http.encoding.enabled=true

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關文章

  • Java的堵塞隊列BlockingQueue詳解

    Java的堵塞隊列BlockingQueue詳解

    這篇文章主要介紹了Java的堵塞隊列BlockingQueue詳解,阻塞隊列常用于生產者和消費者的場景,生產者是向隊列里添加元素的線程,消費者是從隊列里取元素的線程,需要的朋友可以參考下
    2023-12-12
  • java不解壓直接讀取壓縮包中文件的實現(xiàn)方法

    java不解壓直接讀取壓縮包中文件的實現(xiàn)方法

    這篇文章主要介紹了java不解壓直接讀取壓縮包中文件的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • SpringMVC REST風格深入詳細講解

    SpringMVC REST風格深入詳細講解

    這篇文章主要介紹了SpringMVC REST風格,Rest全稱為Representational State Transfer,翻譯為表現(xiàn)形式狀態(tài)轉換,它是一種軟件架構
    2022-10-10
  • 解決SpringBoot在后臺接收前臺傳遞對象方式的問題

    解決SpringBoot在后臺接收前臺傳遞對象方式的問題

    這篇文章主要介紹了解決SpringBoot在后臺接收前臺傳遞對象方式的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • spring單元測試下模擬rabbitmq的實現(xiàn)

    spring單元測試下模擬rabbitmq的實現(xiàn)

    這篇文章主要介紹了spring單元測試下模擬rabbitmq的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • 使用lombok注解導致mybatis-plus TypeHandler失效的解決

    使用lombok注解導致mybatis-plus TypeHandler失效的解決

    這篇文章主要介紹了使用lombok注解導致mybatis-plus TypeHandler失效的解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java中Thread類基本用法詳解

    Java中Thread類基本用法詳解

    Java中的Thread類是用于創(chuàng)建和管理線程的類,Thread類提供了許多方法來管理線程,包括啟動線程、中斷線程、暫停線程等,下面這篇文章主要給大家介紹了關于Java中Thread類基本用法的相關資料,需要的朋友可以參考下
    2023-06-06
  • java中ThreadLocal的應用場景實例分析

    java中ThreadLocal的應用場景實例分析

    在本篇文章里小編給大家整理的是一篇關于java中ThreadLocal的應用場景實例分析,對此有興趣的朋友們可以學習參考下。
    2021-02-02
  • IntelliJ IDEA本地代碼覆蓋后恢復原來的代碼圖解

    IntelliJ IDEA本地代碼覆蓋后恢復原來的代碼圖解

    今天小編就為大家分享一篇關于IntelliJ IDEA本地代碼覆蓋后恢復原來的代碼圖解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • JAVA WSIMPORT生成WEBSERVICE客戶端401認證過程圖解

    JAVA WSIMPORT生成WEBSERVICE客戶端401認證過程圖解

    這篇文章主要介紹了JAVA WSIMPORT生成WEBSERVICE客戶端401認證過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10

最新評論