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

關于SpringBoot3.x中spring.factories功能被移除的解決方案

 更新時間:2022年12月05日 08:19:03   作者:Throwable  
這篇文章主要介紹了SpringBoot3.x中spring.factories功能被移除的解決方案,在配置好相關依賴、最小啟動類和配置之后,發(fā)現(xiàn)項目無法啟動,于是根據(jù)啟動上下文日志和按行DEBUG找到原因并且在等待組件升級兼容之前進行臨時性解決,需要的朋友可以參考下

背景

筆者所在項目組在搭建一個全新項目的時候選用了SpringBoot3.x,項目中應用了很多SpringBoot2.x時代相關的第三方組件例如baomidou出品的mybatis-plus、dynamic-datasource等。在配置好相關依賴、最小啟動類和配置之后,發(fā)現(xiàn)項目無法啟動。于是根據(jù)啟動上下文日志和按行DEBUG找到原因并且在等待組件升級兼容之前進行臨時性解決。

關于spring.factories

spring.factories其實是SpringBoot提供的SPI機制,底層實現(xiàn)是基于SpringFactoriesLoader檢索ClassLoader中所有jar(包括ClassPath下的所有模塊)引入的META-INF/spring.factories文件,基于文件中的接口(或者注解)加載對應的實現(xiàn)類并且注冊到IOC容器。這種方式對于@ComponentScan不能掃描到的并且想自動注冊到IOC容器的使用場景十分合適,基本上絕大多數(shù)第三方組件甚至部分spring-projects中編寫的組件都是使用這種方案。

spring.factories文件的格式大致如下:

# Initializers
org.springframework.context.ApplicationContextInitializer=\
org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,\
org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener

# Application Listeners
org.springframework.context.ApplicationListener=\
org.springframework.boot.autoconfigure.BackgroundPreinitializer

# Environment Post Processors
org.springframework.boot.env.EnvironmentPostProcessor=\
org.springframework.boot.autoconfigure.integration.IntegrationPropertiesEnvironmentPostProcessor

# Auto Configuration Import Listeners
org.springframework.boot.autoconfigure.AutoConfigurationImportListener=\
org.springframework.boot.autoconfigure.condition.ConditionEvaluationReportAutoConfigurationImportListener

# Auto Configuration Import Filters
org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=\
org.springframework.boot.autoconfigure.condition.OnBeanCondition,\
org.springframework.boot.autoconfigure.condition.OnClassCondition,\
org.springframework.boot.autoconfigure.condition.OnWebApplicationCondition

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.baomidou.mybatisplus.autoconfigure.MybatisPlusLanguageDriverAutoConfiguration,\
com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration

通用格式是:接口(或者注解)全類名=\接口實現(xiàn)類(或者使用了該注解的類)全類名-1,\接口實現(xiàn)類(或者使用了該注解的類)全類名-2,\...接口實現(xiàn)類(或者使用了該注解的類)全類名-n。spring.factories中最常用的注解是org.springframework.boot.autoconfigure.EnableAutoConfiguration,通過配置此注解對應的實現(xiàn)了,底層會由AutoConfigurationImportSelector對響應的目標類進行加載和自動注冊。通過閱讀Spring Boot 3.0 Migration Guide得知,spring.factories功能在Spring Boot 2.7已經廢棄,并且會在Spring Boot 3.0移除。

spring.factories被移除后的替代方案

Spring Boot 2.x升級到Spring Boot 3.0其實是一個"破壞性"升級,目前來看相對較大的影響是:

  • 必須使用JDK17
  • Jakarta EE的引入,導致很多舊的類包名稱改變
  • 部分類被徹底移除
  • spring-data模塊的所有配置屬性必須使用spring.data前綴,例如spring.redis.host必須更變?yōu)?code>spring.data.redis.host
  • spring.factories功能在Spring Boot 2.7已經廢棄,在Spring Boot 3.0徹底移除(見下圖)

替代方案比較簡單,就是在類路徑下創(chuàng)建META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,文件的內容是:每個實現(xiàn)類的全類名單獨一行。例如對于使用了(低版本還沒適配Spring Boot 3.0mybatis-plusdynamic-datasource組件的場景,可以在項目某個模塊的resources目錄下建立META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,輸入以下內容:

com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration
com.baomidou.mybatisplus.autoconfigure.MybatisPlusLanguageDriverAutoConfiguration
com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration

對于某些社區(qū)熱度比較高的組件近期可以密切關注其基于Spring Boot 3.0適配的版本發(fā)布,例如mybatis-spring、dubbo等:

這里還沒詳細分析META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports的源碼實現(xiàn),從描述和文件名來看,大致看出它在使用上跟原來的spring.factories文件中編寫org.springframework.boot.autoconfigure.EnableAutoConfiguration是相同的

小結

Spring Boot 3.0的升級門檻比較高。目前來看spring.factories功能的移除個人認為是本次版本升級的最大影響因素,有可能導致大部分第三方編寫過自動注冊板塊的組件全部失效。當然,JDK17也是一個比較高的門檻,對于大部分有歷史包袱的項目如果決定升級需要極大的容器。建議先觀望和關注團隊用到的技術棧或者框架都適配Spring Boot 3.0后再進行版本升級。

到此這篇關于SpringBoot3.x中spring.factories功能被移除的解決方案的文章就介紹到這了,更多相關SpringBoot3.x中spring.factories功能移除內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java+selenium爬取圖片簽名的方法

    java+selenium爬取圖片簽名的方法

    這篇文章主要為大家詳細介紹了java+selenium爬取圖片簽名的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 詳解java JDK 動態(tài)代理類分析(java.lang.reflect.Proxy)

    詳解java JDK 動態(tài)代理類分析(java.lang.reflect.Proxy)

    這篇文章主要介紹了詳解java JDK 動態(tài)代理類分析(java.lang.reflect.Proxy)的相關資料,需要的朋友可以參考下
    2017-06-06
  • Spring boot配置文件加解密詳解

    Spring boot配置文件加解密詳解

    這篇文章主要給大家介紹了關于Spring boot配置文件加解密的相關資料,文中通過示例代碼以及圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • springboot集成nacos的配置方法

    springboot集成nacos的配置方法

    這篇文章主要介紹了springboot集成nacos的配置方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • DoytoQuery中的分頁排序方案示例詳解

    DoytoQuery中的分頁排序方案示例詳解

    這篇文章主要為大家介紹了DoytoQuery中的分頁排序方案示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Java請求Http接口OkHttp超詳細講解(附帶工具類)

    Java請求Http接口OkHttp超詳細講解(附帶工具類)

    這篇文章主要給大家介紹了關于Java請求Http接口OkHttp超詳細講解的相關資料,OkHttp是一款優(yōu)秀的HTTP客戶端框架,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2024-02-02
  • Mybatis-Plus讀寫Mysql的Json字段的操作代碼

    Mybatis-Plus讀寫Mysql的Json字段的操作代碼

    這篇文章主要介紹了Mybatis-Plus讀寫Mysql的Json字段的操作代碼,文中通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • Java操作文件路徑正反斜杠問題解決

    Java操作文件路徑正反斜杠問題解決

    最近在實現(xiàn)文件上傳時,windows與linux系統(tǒng)出現(xiàn)的問題,兩個系統(tǒng)中操作文件使用"\","/"導致IOException,本文主要介紹了Java操作文件路徑正反斜杠問題解決,感興趣的可以了解一下啊
    2024-01-01
  • Spring Boot中數(shù)據(jù)庫操作Druid和HikariDataSource的詳細過程

    Spring Boot中數(shù)據(jù)庫操作Druid和HikariDataSource的詳細過程

    這篇文章主要介紹了Spring Boot中數(shù)據(jù)庫操作Druid和HikariDataSource的詳細過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • 淺談spring security入門

    淺談spring security入門

    這篇文章主要介紹了淺談spring security入門,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07

最新評論