2018年2月28日Spring Boot進入2.0時代,距今已經超過4年了, 2022 年 11 月 Spring Boot 3.0 將正式發布,它將基于 Spring Framework 6.0,并且需要 Java 17 或更高版本,同時它也將是Jakarta EE 9的第一個 Spring Boot 版本,還有六個月的時間留給開發者來過渡到 Spring Boot 3.0,今天胖哥將告訴你一些方法,以便于將來快速遷移到3.0,
Java 17
Java 17 將是繼 Java 8 以來最重要的LTS版本,是 Java 社區八年努力的成果,包含了很多重要的改進,Java 17也是目前性能最強的LTS版本,目前所有的 Spring Boot 2.x 版本都能很好地適配 Java 17,你可以無需等待,先著手JDK的升級除錯,并嘗試一些新的特性和API,
盡快升級到Spring Boot 2.7
前幾日胖哥已經講了Spring Boot 2.7基本已經是Spring Boot 2.x最后一個大版本了,Spring Boot 2.5已經停止OSS支持,不再進行維護,Spring Boot 2.6也將在Spring Boot 3.0發布后停止維護,迭代的速度越來越快了,盡早升級到2.7才能更好遷移到3.0,這里胖哥建議不要跳版本升級,比如不要直接從2.4跳到2.7,盡量按照2.4、2.5、2.6、2.7這樣的步驟升級,跨度太大反而不利于平滑升級,
移除過時代碼
每個Spring Boot版本都會或多或少有一些被標記為@Deprecated的代碼,Spring Boot 3.0 將完全移除在 2.x 過時的代碼,當然2.x早期的過時代碼也可能在最新的2.x被移除,盡量不要使用過時代碼,一般過時代碼上都注釋有過時的原因或者替代的API,
組態檔機制的更改
在Spring Boot 2.4中,組態檔 application.properties 和 application.yaml 的加載機制被改變,目的是為了簡化外部配置的加載方式,使之更加合理,帶來的是不向下兼容,為了平滑升級,Spring 提供了一個配置項來兼容舊機制:
spring:
config:
use-legacy-processing: true
而這個機制將在3.0時移除,我們必須使用符合新機制的配置方式,如果你存在這幾種方式就需要注意了,
多檔案Yaml
如果你在yaml組態檔中使用了間隔符---來宣告多檔案的話,你得知道現在按檔案宣告的順序來注冊宣告的配置屬性;而在 Spring Boot 2.3 及更早版本中,基于組態檔激活順序, 舉個例子:
---
spring:
profiles:
active: dev
application:
name: dev-app
server:
port: 8081
---
spring:
profiles:
active: prod
application:
name: prod-app
server:
port: 8080
這個組態檔在Spring Boot 2.3以及更早的版本中會根據spring.profiles.active來決定加載的環境,但是從2.4開始后面的屬性會覆寫前面的屬性,
外部配置總是覆寫jar內的配置
如果你的組態檔在jar之外,并且該組態檔適用于特定的環境,例如application-dev.yaml,2.4以下的版本中,在jar外面的application.yaml不會覆寫jar中的application-<profile名稱>.yaml檔案,從2.4開始外部檔案將總是覆寫jar內的組態檔,你需要檢查你是否存在這種情況,
激活組態檔
如果您使用spring.profiles屬性來激活環境配置,那么現在就應該遷移到spring.config.activate.on-profile,
舊玩法:
spring:
profiles: "prod"
secret: "production-password"
新玩法:
spring:
config:
activate:
on-profile: "prod"
secret: "production-password"
這真是折騰人啊,spring.profiles.active仍然可以用來激活特定的環境,例如命令列
$ java -jar myapp.jar --spring.profiles.active=prod
你也可以在 application.properties 或 application.yaml 中使用spring.profiles.active,從2.4開始spring.profiles.active不能在特定環境中使用,也就是說application-<profile>.yaml中不能使用,---間隔的多檔案中也不能使用它,一句話,你不能再通過spring.profiles.active來合并一個包含了spring.config.activate.on-profile屬性的組態檔,
另外 spring.profiles.include屬性,只能在非特定組態檔中使用,下面的配置是無效的:
# 無效配置
spring:
config:
activate:
on-profile: "prod"
profiles:
include: "metrics"
更多的要點請參考官方組態檔Spring boot配置遷移指南,
性能更高的路徑決議方式
從Spring Boot 2.6 開始,路徑決議默認使用PathPatternParser,取代了之前的Ant風格匹配AntPathMatcher,升級時很多人的Swagger出問題了,通過spring.mvc.pathmatch.matching-strategy解決了這個問題,雖然在Spring Boot 3.0中AntPathMatcher會繼續生效,但是PathPatternParser成為官方推薦,因為它的性能更高,稍后我也將出一篇專題來分析PathPatternParser,
兼容問題
首先是Jakarta EE 9的兼容問題,確保你的第三方依賴庫和你的代碼都兼容Jakarta EE 9,另外也要檢查Spring框架正在使用的第三方依賴jar是否有計劃兼容Spring 6,
嘗試去學習Spring 6
Spring 6以及Spring Boot 3已經發布了多個里程碑,在閑暇時間可以抽出一些時間去嘗試一下,體驗新的特性和變化,評估你應用升級的難度,
關注公眾號:Felordcn 獲取更多資訊
個人博客:https://felord.cn
|
博主:碼農小胖哥 出處:felord.cn 本文著作權歸原作者所有,不可商用,轉載需要宣告出處,否則保留追究法律責任的權利,如果文中有什么錯誤,歡迎指出,以免更多的人被誤導, |
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/485099.html
標籤:Java
上一篇:Java如何判斷陣列是否相等呢?
