為 Spring Boot 3.0 做準備

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

Spring Boot 2.0 是 2.x 系列的第一個釋出版本,於2018年2月28日釋出。我們剛剛釋出了 Spring Boot 2.7,這意味著到目前為止,我們已經維護 2.x 系列超過4年了。在此期間,我們總共釋出了 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 的新特性(如 record)。

我們強烈建議您儘可能立即升級您的 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 Milestones

雖然我們不建議在生產環境中使用,但您可以嘗試 Spring Boot 3.0 milestones 來了解遷移您的專案有多難。在程式碼的一個分支上嘗試 milestones 是一個很好的方式來預防潛在的問題。它們可以在 https://repo.spring.io/milestone 獲取。在 https://start.spring.io 上建立一個專案並選擇最新的 3.0 milestone 將會包含構建配置中必要的倉庫。

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

我們一直對反饋感興趣,並且在 GA 版本釋出前發現 bug 時我們非常高興。

您可以在 github.com/spring-projects/spring-boot/issues 提出 issue(請務必告訴我們您使用的 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 社群所有即將舉行的活動。

檢視所有