為 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 或更高版本。它也將是 Spring Boot 的第一個版本,使用 Jakarta EE 9 API (jakarta.*) 而不是 EE 8 (javax.*)。

未來六個月是為這個主要版本準備您自己的專案的理想機會。在這篇部落格文章中,我們將介紹您可以今天做的一些事情,以使未來的遷移盡可能輕鬆。

升級至 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

某些應用程式可能已手動切換回 AntPathMatcher 實作,方法是設定 spring.mvc.pathmatch.matching-strategy 屬性。雖然這將繼續在 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 授權。

我們一直對回饋感興趣,並且我們很高興在我們發布 GA 版本之前發現錯誤。

您可以在 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 社群中所有即將到來的活動。

查看所有