Spring Boot 3.0 現(xiàn)已正式發(fā)布,它包含了 12 個(gè)月以來(lái) 151 個(gè)開(kāi)發(fā)者的 5700 多次代碼提交。這是自 4.5 年前發(fā)布 2.0 以來(lái),Spring Boot 的第一次重大修訂。
它也是第一個(gè)支持 Spring Framework 6.0 和 GraalVM 的 Spring Boot GA 版本,同時(shí)也是第一個(gè)基于Java 17的Spring Boot版本,以Jakarta EE 9為基準(zhǔn)并支持Jakarta EE 10。同時(shí)借助于GraalVM支持了AOT和Native Image。
3.0升級(jí)指南如果你想嘗試Spring Boot 3.0,不妨參考胖哥精心準(zhǔn)備的升級(jí)指南。
升級(jí)JDK首先要升級(jí)你的JDK到JDK17,如果你要使用Native Image特性,要使用GraalVM 22.3以上和 Native Build Tools Plugin 0.9.17 或更高的版本。
平滑升級(jí)這里不建議直接從低于Spring Boot 2.7的版本直接升級(jí)到Spring Boot 3.0。不然新特性和API變更太多,就需要你修改大量的配置,升級(jí)路徑會(huì)過(guò)于陡峭。建議通過(guò)小版本號(hào)分階段升級(jí)到2.4、2.6、2.7,最后再到3.0。
依賴評(píng)估Spring Boot3.0下依賴組件的版本要求也不盡相同,比如Spring Boot Kafka Starter可能對(duì)Kafka有什么要求,這要求你進(jìn)行充分評(píng)估。Spring Cloud體系應(yīng)該在對(duì)應(yīng)的Spring Boot 3.0體系發(fā)布后進(jìn)行升級(jí)。
升級(jí)到Spring Boot 3一旦上面的工作準(zhǔn)備完畢,你就可以開(kāi)始嘗試升級(jí)到Spring Boot 3.0了。
配置屬性兼容在Spring Boot 3.0中,一些配置屬性被重新命名/刪除了,開(kāi)發(fā)人員需要相應(yīng)地更新他們的application.properties
或者application.yml
。為了幫助你做到這一點(diǎn),Spring Boot 3.0提供了一個(gè)spring-boot-properties-migrator
模塊。一旦作為依賴關(guān)系添加到你的項(xiàng)目中,它不僅會(huì)在啟動(dòng)時(shí)分析你的應(yīng)用程序的環(huán)境并打印診斷結(jié)果,而且還會(huì)在運(yùn)行時(shí)為你臨時(shí)遷移屬性。把下面這個(gè)加入pom.xml
以幫助你升級(jí)兼容配置屬性:
org.springframework.boot spring-boot-properties-migratorruntime
?Jakarta EE完成遷移之后,務(wù)必要移除
spring-boot-properties-migrator
依賴。
由于Java EE已經(jīng)變更為Jakarta EE,包名以javax
開(kāi)頭的需要相應(yīng)地變更為jakarta
。這里建議通過(guò)Intellij IDEA 2021.2提供的內(nèi)置功能批量處理即可:
?升級(jí)的關(guān)鍵變更當(dāng)然你也可以手動(dòng)去變更包名。
Spring Boot 3.0有一些關(guān)鍵改變,這些改變將與大多數(shù)應(yīng)用程序有關(guān)。所以開(kāi)發(fā)者要仔細(xì)閱讀這些變更。
圖片Banner不再支持現(xiàn)在Spring Boot 3.0自定義Banner只支持文本類(lèi)型(banner.txt
),不再支持圖片類(lèi)型。
Logback和Log4j2的日志消息的日期和時(shí)間部分的默認(rèn)格式已經(jīng)改變,以符合ISO-8601標(biāo)準(zhǔn)。新的默認(rèn)格式yyyy-MM-dd'T'HH:mm:ss.SSSXXX
使用T
來(lái)分隔日期和時(shí)間,而不是空格字符,并在最后添加時(shí)區(qū)偏移。LOG_DATEFORMAT_PATTERN
環(huán)境變量或logging.pattern.dateformat
屬性可以用來(lái)恢復(fù)以前的默認(rèn)值yyyy-MM-dd HH:mm:ss.SSS
。
配置屬性類(lèi)注解@ConfigurationProperties
默認(rèn)情況下不再需要使用@ConstructorBinding
來(lái)標(biāo)記構(gòu)造,你應(yīng)該從配置類(lèi)上移除它,除非該配置類(lèi)多個(gè)構(gòu)造函數(shù)來(lái)明確配置屬性綁定。
因?yàn)?code>SnakeYAML的JSON
解析與其他解析器的實(shí)現(xiàn)不一致。如果你直接使用YamlJsonParser
,請(qǐng)遷移到其他JsonParser
實(shí)現(xiàn)中。
Spring Boot 2.7引入了一個(gè)新的文件:
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
用于注冊(cè)自動(dòng)配置,同時(shí)保持與spring.factories
中注冊(cè)的向后兼容。Spring Boot 3.0發(fā)布后,spring.factories
已經(jīng)被移除,只能通過(guò)imports
文件來(lái)注冊(cè)自動(dòng)配置。
現(xiàn)在Spring MVC和Spring Webflux 的路徑匹配規(guī)則已經(jīng)做了調(diào)整,默認(rèn)情況下尾部斜杠/
的匹配機(jī)制將和以前不同:
3.0以前/foo/bar
等同于/foo/bar/
3.0以后/foo/bar
不同于/foo/bar/
server.max-http-header-size
已經(jīng)被棄用,現(xiàn)在用server.max-http-request-header-size
替代 ,并且現(xiàn)在該屬性只能來(lái)配置請(qǐng)求頭的大小,不再限制某些Web容器的響應(yīng)頭大小,如果需要限制響應(yīng)頭大小請(qǐng)通過(guò)自定義WebServerFactoryCustomizer
來(lái)實(shí)現(xiàn)。
優(yōu)雅停機(jī)由SmartLifecycle
實(shí)現(xiàn),在SmartLifecycle.DEFAULT_PHASE - 2048
階段開(kāi)始,Web服務(wù)器在SmartLifecycle.DEFAULT_PHASE - 1024
階段停止。任何參與優(yōu)雅關(guān)機(jī)的SmartLifecycle實(shí)現(xiàn)都應(yīng)該被相應(yīng)地更新。
由于Jetty目前還不支持Servlet 6.0,使用Jetty的開(kāi)發(fā)者需要通過(guò)降低Jakarta Servlet的版本為5.0。
數(shù)據(jù)訪問(wèn)相關(guān)的變更spring.data
前綴已被保留給Spring Data項(xiàng)目,如果你使用了Spring Data項(xiàng)目的子項(xiàng)目,application.yaml
中相關(guān)的配置屬性就需要響應(yīng)的變更。例如spring.redis
現(xiàn)在需要修改為spring.data.redis
。
數(shù)據(jù)訪問(wèn)相關(guān)的組件現(xiàn)在都使用了比較新的版本:
Flyway更新到 9.0
Hibernate 更新到 6.1
R2DBC 更新到 1.0
另外 Flapdoodle 嵌入式 MongoDB 的自動(dòng)配置被移除,開(kāi)發(fā)者有需要的話需要自行引入。
ElasticsearchElasticsearch的Rest客戶端采用了新的API實(shí)現(xiàn),舊的自動(dòng)配置和Spring Data Elasticsearch中舊的客戶端API已經(jīng)被移除。
Spring Security相關(guān)的變更,胖哥稍后會(huì)整理并獨(dú)立分享。
其它變更可觀測(cè)性、度量跟蹤、Maven、Gradle也都有不同程度的變更,有需要可以查看官方的Spring-Boot-3.0-Migration-Guide 。
記得收藏這一篇,后續(xù)胖哥會(huì)深入Spring 6.0和Spring Boot 3.0的細(xì)節(jié)部分。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧