重頭學 || SpringBoot 2.7 自定義 Starter 方法又變了
springboot 2.7 已經標記 spring.factories 載入自動化配置方式為過期,springboot 3 中將完全移除原有方式,這也就意味著現有市面所有 spring-boot-starter 將無法適配 spring boot 3
一、 spring.factories 是啥
在 Spring 中也有一種類似 Java SPI 的載入機制。它在 META-INF/spring.factories 檔案中配置介面的實現類名稱,然後在程式中讀取這些配置檔案並例項化。
這種自定義的 SPI 機制是 Spring Boot Starter 實現的基礎。即當你依賴了某個 Starter,那麼該 Starter 就提供相關的類供載入,這些配置類負責特定的功能。如果你沒有依賴某個 Starter,就不會載入相關的類。
二、新特性支援自動配置分片
2.1 為什麼要支援配置分片
我們以 mybatis-plus-boot-starter
為例,如下圖 spring.factories 配置很多幾乎所有的 spring config bean 都可以往這裡放,對於開發者維護造成困難。
-
② 環境配置處理器
-
③ 自動化配置類
2.2 如何使用自動配置分片功能
建立 org.springframework.boot.autoconfigure.AutoConfiguration.imports
檔案
├── src
│ └── main
│ └── resources
│ ├── META-INF
│ │ └── spring
│ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
2.3 配置分片的原始碼分析
-
① 相容原來的 spring.factories 配置載入方式
-
② 讀取分片配置 載入相關的類
三、擴充套件屬於自己的 Import SPI
-
pig [1] 定義
org.springframework.cloud.openfeign.FeignClient.imports
用於定義 feignclient (通過 SPI 機制注入 feignclient ,避免包規則不規範導致 feignclient 無法載入的問題)
-
使用
ImportCandidates.load()
四、更優雅的處理配置分片 mica-auto
如果你不喜歡配置這種繁瑣的 SPI 檔案,可以來試驗一下 mica-auto [2]
最新版本可以基於 @AutoConfiguration
註解自動生成並配置對應的
imports 檔案
參考資料
pig: http://github.com/pig-mesh/pig
mica-auto: http://github.com/lets-mica/mica-auto
- 重磅!騰訊正式開源SpringCloud解決方案
- 久等|全面擁抱Spring全新OAuth解決方案
- 安全 || 為了安全我升級到了 fastjson2
- 重頭學 || SpringBoot 2.7 自定義 Starter 方法又變了
- 參與開源還能拿獎金,mica社群專案已定
- 微博頭條等展示使用者ip屬地,我用java輕鬆搞定
- Spring Framework RCE 早期公告
- Spring Cloud Gateway 高危漏洞加固建議
- Java 11 到 Java 17 的最佳 HotSpot JVM 選項和開關
- 保姆級升級 java17 指南,建議收藏
- Java17 隱藏寶藏,從 Stream.mapMulti 到 HexFormat
- Spring 2021 報告
- JAVA 應用提速之 Large pages【譯】
- OpenJDK 17 中的 Shenandoah:亞毫秒級 GC 停頓【譯】
- idea 2021 很卡?一招教你起飛
- NewSQL || 微服務架構的必備選擇
- Grafana 8.1 新特性之 Geomap 面板
- 一文精通 http 狀態碼
- 使用 MQTT 和 Grafana Live 實時將感測器資料流傳輸到 Grafana
- 【譯】關係型資料庫的工作原理