重頭學 || SpringBoot 2.7 自定義 Starter 方法又變了

語言: CN / TW / HK
官方過期通知

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,就不會載入相關的類。

pig seata 自定配置示例

二、新特性支援自動配置分片

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
上文的common-seata 變更為此種方式

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 檔案

mica-auto最新版本已適配

參考資料

[1]

pig: http://github.com/pig-mesh/pig

[2]

mica-auto: http://github.com/lets-mica/mica-auto