重頭學 || 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: https://github.com/pig-mesh/pig

[2]

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