Spring boot 按需啟用組件Bean

2020-12-25 網易新聞

ConditionalOnProperty 這個註解,可以用於控制某個業務組件,是否開啟。

當我們在配置文件中加上enabled: true, 開啟組件, 沒有配置,默認關閉組件

這樣我們可以定製化一個通用的模塊,它是開,還是關,從而達到充分復用代碼的目的。

比如我們封裝好的一個核心Lib, 裡面有各種MongoDB, Redis, Mysql ,還有各種外部服務,比如發郵件,發簡訊。

通常我們一個新業務來了,我總是希望能復用這些基礎代碼類庫,但是如果直接引入進來,那就要加一萬條配置,煩的一筆。

所以我們就利用了ConditionalOnProperty註解,實現了定製化,可以開、關業務組件。

比如我需要發郵件的時候,我就配置文件加一項,如果不需要,就關掉。

我們看一下配置長什麼樣子,在application.yml配置中

這裡有個JDBC配置, 現在是開啟狀態。

我們看代碼中

這個組件裡面就用到了@ConditionalOnProperty註解,這個class裡面有很多Bean,如果條件不滿足,它就不會被啟動加載, 當需要的時候,你只需要把參數改一下,就可以用了。

關於ConditionalOnProperty的規則,可以查看官方注釋說明,以及示例。

@Conditional檢查指定的屬性是否具有特定值。 默認情況下,屬性必須存在於環境中,並且不等於false。 具有havingValue()和matchIfMissing()屬性允許進行進一步的自定義。

具有havingValue()屬性可用於指定該屬性應具有的值。 下表顯示條件何時根據屬性值和havingValue()屬性匹配:

如果該屬性根本不包含在環境中,則請查詢matchIfMissing()屬性。 默認情況下,缺少的屬性不匹配。

此條件不能可靠地用於匹配收集屬性。 例如,在以下配置中,如果環境中存在spring.example.values,則條件匹配,但如果存在spring.example.values [0],則條件不匹配。

@ConditionalOnProperty(prefix = "spring", name = "example.values") class ExampleAutoConfiguration { }

上面的例子 ,你最好換一下,換成自己的變量命名。

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺「網易號」用戶上傳並發布,本平臺僅提供信息存儲服務。

相關焦點

  • Spring Boot 2.3.0 發布 - OSCHINA - 中文開源技術交流社區
    Spring Boot 2.3.0 已經發布,此版本主要更新內容包括:依賴升級新版本核心組件依賴升級
  • Spring Boot 2.4.3、2.3.9 版本發布,你準備好了嗎?
    心急的小夥伴現在可從 repo.spring.io 和 Maven Central 獲得相關內容。<parent>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-parent</artifactId>  <version>2.4.3</version>
  • Spring Boot 2.4 正式發布,重大調整!!!
    更多細節可參考:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Config-Data-Migration-Guide如果你想繼續使用 Spring Boot 2.3 的配置邏輯,也可以通過在
  • 再談Spring中Bean的生命周期
    一、Bean 的完整生命周期在傳統的Java應用中,bean的生命周期很簡單,使用Java關鍵字 new 進行Bean 的實例化,然後該Bean 就能夠使用了。一旦bean不再被使用,則由Java自動進行垃圾回收。
  • 如何用Spring Boot和Cloud實現微服務
    下面我將解釋每個組件能夠解決的實際問題。 Spring Cloud Gateway — 如下圖所示,那些所有來自網際網路(Web或OpenAPI)的、對於微服務的調用,都應當經由Gateway,以處理路由和交互(Cross-Cutting)之類的問題,其中包括:安全性、監控、以及魯棒性等方面。
  • Spring Boot與Shiro整合實現用戶認證
    ;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration
  • Spring Boot集成validation用於優雅的校驗API參數的合法性
    ,郵箱格式是否正確等等,校驗框架比較多,用的比較多的是hibernate-validator, 也支持國際化,也可以自定義校驗類型的註解,這裡只是簡單的演示校驗框架在Spring Boot中的簡單集成,要想了解更多可以參考 hibernate-validator1. pom.xml<dependency> <groupId>org.springframework.boot
  • Spring Boot 節省95%內存佔用
    /gu install native-image初始化 Spring Boot 2.4 項目Spring Initializr 創建 demo 項目curl https://start.spring.io/starter.zip -d dependencies=web \ -d bootVersion
  • Spring 的生命周期
    Spring 的生命周期:粗捏可以分為三個階段,它是有bean的第一次加工,還有bean的第二次加工過程,首先bean的第一次加工,將你的對象實例化,在這實例化的前後,有一個BeanPostProcessor在做前置和後置處理
  • Spring Security(二)--Guides
    作者:老徐原文地址:https://www.cnkirito.moe/2017/09/20/spring-security-2/友情提示:歡迎關注公眾號【芋道源碼】。😈關注後,拉你進【源碼圈】微信群和【老徐】搞基嗨皮。友情提示:歡迎關注公眾號【芋道源碼】。
  • springboot+springsecurity實現前後端分離簡單實現!
    通過各種方式學習springsecurity,在B站、騰訊課堂、網易課堂、慕課網沒有springsecurity的前後端分離的教學視頻,那我就去csdn去尋找springsecurity博客,發現幾個問題:要麼就是前後端不分離,要麼就是通過內存方式讀取數據,而不是通過資料庫的方式讀取數據,要麼就是大佬們給的代碼不全、把代碼講的太繞,關鍵部分沒有注釋
  • Spring IOC初始化執行流程
    運行環境:jdk8,springboot-2.2.2Spring IOC容器的初始化核心在於AbstractApplicationContext的refresh方法refresh方法執行的大體流程獲取到BeanFactory並做一些BeanFactory的準備工作執行BeanFactory的後置處理器創建並註冊其他的後置處理器初始化MessageSource組件
  • springcloud的微服務開發日記之五(zuul路由轉發)
    2018年的日程安排如下:記錄springcloud開發微服務的全過程記錄vue實現的知識圖譜服務記錄中醫理論在知識圖譜上的應用每天一個小目標,做比昨天更好的自己博客地址 i.drai.top有興趣的可以關注一下,共同進步另:關注後可點擊頭條號的「源碼」連結,有空閒時間我會不定期的上傳源碼以供參考
  • 學習學習SpringSecurity
    初階 Spring Security添加maven依賴<dependency><groupId>org.springframework.boot</groupId>><artifactId>spring-boot-starter-security</artifactId></dependency>重新部署,會看到一個登陸頁面。
  • 乾貨|一文讀懂 Spring Data Jpa!
    >org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>5.0.2.RELEASE</version> </dependency>