為 Spring Boot 3.0 做準備

工程 | Phil Webb | 2022 年 5 月 24 日 | ...

Spring Boot 2.0 是 2.x 系列的第一個版本,於 2018 年 2 月 28 日釋出。我們剛剛釋出了 Spring Boot 2.7,這意味著到目前為止,我們已經維護 2.x 系列四年多了。在此期間,我們總共釋出了 95 個不同的版本!

整個 Spring 團隊以及我們社群的許多貢獻者現在正在為下一代 Spring 做準備。我們計劃於 2022 年 11 月釋出 Spring Boot 3.0。這個下一個主要版本將基於 Spring Framework 6.0,並且需要 Java 17 或更高版本。它也將是第一個使用 Jakarta EE 9 API (jakarta.*) 而不是 EE 8 (javax.*) 的 Spring Boot 版本。

接下來的六個月是為您自己的專案準備此重要版本的理想時機。在這篇部落格文章中,我們將介紹一些您可以現在就做的事情,以便未來的遷移儘可能順利。

升級到 Java 17

Spring Boot 3.0 將需要 Java 17,但您無需等到該版本釋出再升級到最新的 LTS Java 版本。任何最近的 Spring Boot 2.x 版本都可以很好地與 Java 17 配合使用。您還可以在自己的程式碼庫中使用 Java 17 的特性(例如 records)。

如果可能的話,我們強烈建議您立即升級您的 JDK。

升級到最新的 Spring Boot 2.7.x

如果您當前使用的是較舊的 Spring Boot 2.x 版本,我們強烈建議您升級到 Spring Boot 2.7。當 Spring Boot 3.0 釋出時,我們將提供遷移指南,但該指南假定您是從 Spring Boot 2.7 而不是更早的版本進行遷移。

升級說明始終在我們的釋出說明中提供。例如,如果您要從 Spring Boot 2.6 升級到 Spring Boot 2.7,可以參考本節

如果您從 Spring Boot 2.5 或更早版本進行升級,我們不建議跳過版本。通常分步升級(例如 2.5 → 2.6 → 2.7)比直接從 2.5 → 2.7 升級更容易。

檢查對已棄用程式碼的呼叫

隨著 Spring Boot 的發展,我們經常會棄用方法或類並提供替代方案。我們通常提供 12 個月的重疊期,之後會移除已棄用的程式碼。您可以在我們的 Wiki 上找到此策略的詳細資訊

Spring Boot 3.0 將移除所有已棄用的程式碼,因此我們建議您檢查現有程式碼是否依賴於任何已棄用的方法。值得考慮使用 -Werror Java 編譯器選項,以便在報告棄用警告時使構建失敗。

從舊版 application.properties 和 application.yaml 處理遷移

Spring Boot 2.4 改變了 application.propertiesapplication.yaml 檔案的載入方式。大多數使用者沒有注意到這個變化,但少數專案可能設定了 spring.config.use-legacy-processing 屬性為 true 來恢復舊行為。

舊版處理支援將不會出現在 Spring Boot 3.0 中,因此您應該檢查您的專案是否設定了 spring.config.use-legacy-processing

使用 Spring MVC 的 PathPatternParser

Spring MVC 提供了兩種解析模式的方式。從 Spring Boot 2.6 開始,預設使用 PathPatternParser

一些應用可能透過設定 spring.mvc.pathmatch.matching-strategy 屬性手動切換回 AntPathMatcher 實現。儘管這在 Spring Boot 3.0 中仍然有效,但如果可能的話,我們建議使用 PathPatternParser,因為它提供了更好的效能。

檢查第三方專案是否釋出了 Jakarta EE 9 相容版本

Jakarta EE 9 引入了一個新的頂級包 jakarta,取代了 EE 8 的 javax 頂級包。例如,Jakarta EE 8 中的 Servlet 規範使用 javax.servlet 包,但在 EE 9 中已更改為 jakarta.servlet

一般來說,在同一個專案中混合使用 Java EE 和 Jakarta EE API 是不可能的。您需要確保自己的程式碼以及所有第三方庫都使用 jakarta.* 包匯入。

好訊息是,大多數維護良好的庫都在釋出 Jakarta EE 9 相容版本。例如,Hibernate、Thymeleaf、Tomcat、Jetty 和 Undertow 都已經這樣做了。

我們建議您花些時間檢查一下您使用的任何與 Jakarta EE 整合的第三方庫,並確認它們是否具有 EE 9 相容版本。我們發現最常見的問題是匯入 Servlet API 的專案。

檢查第三方專案是否釋出了更新的 Spring 相容版本

Spring Framework 6.0 將與上一代不二進位制相容。如果您使用了提供 Spring 整合的第三方 Jar 包,您應該檢查它們是否計劃釋出 Spring Framework 6 相容版本。

試用 Spring Boot 里程碑版本

儘管我們不建議將其用於生產環境,但您今天就可以嘗試 Spring Boot 3.0 里程碑版本,看看遷移專案有多困難。在程式碼分支上試用里程碑版本是預防潛在問題的好方法。它們可從 https://repo.spring.io/milestone 獲取。在 https://start.spring.io 建立專案並選擇最新的 3.0 里程碑版本將在構建配置中包含所需的倉庫。

如果您嘗試將現有的 2.7.x Spring Boot 應用升級到最新的 3.0.0 里程碑版本,您可能還想看看 Spring Boot Migrator 專案。這個實驗性專案旨在自動化許多遷移任務,包括升級。它是使用 OpenRewrite 構建的,並採用 Apache 2.0 許可。

我們始終歡迎反饋,並且非常高興在釋出通用版本之前發現並解決 Bug。

您可以在 github.com/spring-projects/spring-boot/issues 提交問題(請務必告知您使用的 Spring Boot 版本)。

考慮商業支援

Spring Boot 2.7 是 2.x 系列計劃中的最後一個版本。我們將此版本的開源支援延長了額外的 6 個月,直至 2023 年 11 月。

此外,Spring Boot 2.7 的商業支援也已延長,可用至 2025 年 2 月。

您可以在 spring.io/projects/spring-boot 檢視專案支援詳情。商業支援詳情可在 tanzu.vmware.com/spring-runtime 找到。

任何由商業支援請求觸發的版本都將始終作為開源釋出,因此商業客戶也幫助了開源社群。

獲取 Spring 新聞稿

訂閱 Spring 新聞稿,保持聯絡

訂閱

快人一步

VMware 提供培訓和認證,助您加速進步。

瞭解更多

獲取支援

Tanzu Spring 透過一項簡單的訂閱提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案。

瞭解更多

即將舉辦的活動

檢視 Spring 社群所有即將舉辦的活動。

檢視全部