是時候為Spring Boot 3.0做準備了

2018年2月28日Spring Boot進入2.0時代薇组,距今已經(jīng)超過4年了。 2022 年 11 月 Spring Boot 3.0 將正式發(fā)布坐儿,它將基于 Spring Framework 6.0,并且需要 Java 17 或更高版本貌矿,同時它也將是Jakarta EE 9的第一個 Spring Boot 版本。還有六個月的時間留給開發(fā)者來過渡到 Spring Boot 3.0逛漫,今天胖哥將告訴你一些方法黑低,以便于將來快速遷移到3.0尽楔。

Java 17

Java 17 將是繼 Java 8 以來最重要的LTS版本,是 Java 社區(qū)八年努力的成果阔馋。包含了很多重要的改進玛荞,Java 17也是目前性能最強的LTS版本呕寝。目前所有的 Spring Boot 2.x 版本都能很好地適配 Java 17勋眯,你可以無需等待下梢,先著手JDK的升級調試,并嘗試一些新的特性和API孽江。

盡快升級到Spring Boot 2.7

前幾日胖哥已經(jīng)講了Spring Boot 2.7基本已經(jīng)是Spring Boot 2.x最后一個大版本了讶坯,Spring Boot 2.5已經(jīng)停止OSS支持岗屏,不再進行維護,Spring Boot 2.6也將在Spring Boot 3.0發(fā)布后停止維護这刷,迭代的速度越來越快了婉烟。盡早升級到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.propertiesapplication.yaml 的加載機制被改變,目的是為了簡化外部配置的加載方式沙郭,使之更加合理,帶來的是不向下兼容病线。為了平滑升級吓著,Spring 提供了一個配置項來兼容舊機制:

spring:
  config:
    use-legacy-processing: true

而這個機制將在3.0時移除送挑,我們必須使用符合新機制的配置方式,如果你存在這幾種方式就需要注意了惕耕。

多文檔Yaml

如果你在yaml配置文件中使用了間隔符---來聲明多文檔的話纺裁,你得知道現(xiàn)在按文檔聲明的順序來注冊聲明的配置屬性司澎;而在 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以及更早的版本中會根據(jù)spring.profiles.active來決定加載的環(huán)境浪南。但是從2.4開始后面的屬性會覆蓋前面的屬性漱受。

外部配置總是覆蓋jar內的配置

如果你的配置文件在jar之外,并且該配置文件適用于特定的環(huán)境昂羡,例如application-dev.yaml絮记。2.4以下的版本中虐先,在jar外面的application.yaml不會覆蓋jar中的application-<profile名稱>.yaml文件,從2.4開始外部文件將總是覆蓋jar內的配置文件蛹批。你需要檢查你是否存在這種情況撰洗。

激活配置文件

如果您使用spring.profiles屬性來激活環(huán)境配置腐芍,那么現(xiàn)在就應該遷移到spring.config.activate.on-profile

舊玩法:

spring:
  profiles: "prod"
secret: "production-password"

新玩法:

spring:
  config:
    activate:
      on-profile: "prod"
secret: "production-password"

這真是折騰人啊猪勇。spring.profiles.active仍然可以用來激活特定的環(huán)境设褐,例如命令行

$ java -jar myapp.jar --spring.profiles.active=prod

你也可以在 application.propertiesapplication.yaml 中使用spring.profiles.active,從2.4開始spring.profiles.active不能在特定環(huán)境中使用助析,也就是說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會繼續(xù)生效熄诡,但是PathPatternParser成為官方推薦诗力,因為它的性能更高,稍后我也將出一篇專題來分析PathPatternParser苇本。

兼容問題

首先是Jakarta EE 9的兼容問題袜茧,確保你的第三方依賴庫和你的代碼都兼容Jakarta EE 9瓣窄。另外也要檢查Spring框架正在使用的第三方依賴jar是否有計劃兼容Spring 6。

嘗試去學習Spring 6

Spring 6以及Spring Boot 3已經(jīng)發(fā)布了多個里程碑俺夕,在閑暇時間可以抽出一些時間去嘗試一下裳凸,體驗新的特性和變化,評估你應用升級的難度登舞。

關注公眾號:碼農(nóng)小胖哥,獲取更多資訊

個人博客:https://felord.cn

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末悬荣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌践叠,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件禁灼,死亡現(xiàn)場離奇詭異管挟,居然都是意外死亡弄捕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門守谓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來穿铆,“玉大人斋荞,你說我怎么就攤上這事∑侥穑” “怎么了凤优?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵蜈彼,是天一觀的道長。 經(jīng)常有香客問我幸逆,道長棍辕,這世上最難降的妖魔是什么秉颗? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蚕甥,結果婚禮上哪替,老公的妹妹穿的比我還像新娘菇怀。我一直安慰自己凭舶,他們只是感情好爱沟,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呼伸,像睡著了一般身冀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搂根,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天珍促,我揣著相機與錄音剩愧,去河邊找鬼。 笑死仁卷,一個胖子當著我的面吹牛穴翩,可吹牛的內容都是我干的锦积。 我是一名探鬼主播芒帕,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼副签,長吁一口氣:“原來是場噩夢啊……” “哼遥椿!你這毒婦竟也來了基矮?” 一聲冷哼從身側響起冠场,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碴裙,沒想到半個月后钢悲,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡莺琳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了惭等。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡办铡,死狀恐怖,靈堂內的尸體忽然破棺而出寡具,到底是詐尸還是另有隱情秤茅,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布框喳,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏五垮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一拼余、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧匙监,春花似錦凡橱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽达罗。三九已至,卻和暖如春粮揉,著一層夾襖步出監(jiān)牢的瞬間巡李,已是汗流浹背侨拦。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辐宾,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓叠纹,卻偏偏與公主長得像季研,于是被迫代替她去往敵國和親誉察。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內容