序
本文主要研究一下Spring Boot 2.7, 3.x這幾個版本的區別
Spring Boot 2
Spring Boot 2.0在2018年2月28日釋出,Spring Boot 2.7是2.x的最後一個釋出版本,該版本的開源將於2023年11月停止支援,商業支援可延長到2025年2月
從2.6遷移到2.7
- flyway從8.0更新到了8.5
- H2更新到了2.1.120
- MSSQL driver從v9更新到了v10
- OkHttp3將不再支援,改為支援OkHttp4
- embedded mongo3.4不再支援
- Hazelcast 3.0不再被支援
- camelCase風格的metric tag將被重新命名到lower-case並且以.來分割
- 升級Spring Security到5.7版本,廢棄了WebSecurityConfigurerAdapter
- requestMappingHandlerMapping這個bean不再被標記為@Primary,因此注入的時候可以使用
List<RequestMappingHandlerMapping>
- MySQL JDBC driver的8.0.31的座標是com.mysql:mysql-connector-j以及mysql:mysql-connector-java,但是從8.0.32開始只發布到了com.mysql:mysql-connector-j這個座標,而Spring Boot2.7.8版本更新該依賴到8.0.32版本
- auto-configuration和management context的發現機制發生了變化,它們不在spring.factories中註冊了,改為在
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
以及META-INF/spring/org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration.imports
中宣告,而且之前的逗號分隔改為換行分隔 - 新引入了@AutoConfiguration註解,用於頂級的auto-configuration,如果是內嵌的或者是被@AutoConfiguration註解的class引用的則繼續使用@Configuration註解
- maven和gradle外掛現在都支援了Podman
- auto-configuration新增了對Cache2k的支援
Spring Boot 3
- Spring Boot 3版本於2022年11月24日釋出,它是Spring Boot的下一個大版本,基於Spring Framework 6.0,而且要求Java最低版本為Java17。
- Spring Framework 6.0於2022年11月16日釋出,是Spring Framework的下一個大版本,該版本要求Java最低版本為Java17,而且遷移到了Jakarta EE 9+版本,使用了
jakarta.*
替換掉了javax.*
,支援了Tomcat 10.1,Hibernate ORM 6.1。另外開始支援AOT編譯以及後續釋出的協程。 - Jakarta EE 10使用了Servlet 6.0及JPA 3.1規範
- 不再支援Image Banner
- 日誌的日期格式從以前的
yyyy-MM-dd HH:mm:ss.SSS
變更為yyyy-MM-dd’T’HH:mm:ss.SSSXXX
,可以使用logging.pattern.dateformat
屬性進行更改 - 不再支援auto-configuration註冊到spring.factories
- 尾斜槓預設不被支援,如果沒有顯式指定將返回404,可以透過configurer.setUseTrailingSlashMatch(true)來開啟
- server.max-http-header-size被廢棄,改為使用server.max-http-request-header-size
- actuator endpoints開啟加密機制,預設連key也會被加密,可以透過management.endpoint.env.show-values及management.endpoint.configprops.show-values來進行配置
legacy application.propertis
Spring Boot 2.4版本變更了application.properties以及application.yaml的載入方式,可以透過設定spring.config.use-legacy-process
為true來恢復以前的行為,不過在3.0版本legacy的處理方式不再被支援
如果僅僅是簡單的application.properties以及application.yaml,則該變化沒有影響,影響到的是帶profile的寫法
具體見Spring Boot Config Data Migration Guide
PathPatternParser
Spring MVC提供了AntPathMatcher及PathPatternParser兩種解析pattern的方式,在2.6版本預設使用PathPatternParser,透過spring.mvc.pathmatch.matching-strategy
可以去改變,後續推薦使用PathPatternParser,因為它的效能更好。
spring-boot-properties-migrator
Spring Boot 3.0版本重新命名或者移除了一些配置屬性,可以透過spring-boot-properties-migrator來分析和相容
Spring Cloud版本
Hoxton版本之後採用日期的命名方式
Spring Cloud 2020.0(Ilford版本)
- 從2020.0.0到2020.0.6一共釋出了7個版本,其中2020.0.2要求Spring Boot 2.4.3版本
- 這個版本主要是從spring-cloud-netflix移除了一些元件,比如ribbon,hystrix,turbine
- 相容Spring Boot 2.4.x及2.5.x版本
Spring Cloud 2021.0(Jubilee版本)
- 從2021.0.0到2021.0.7一共釋出了8個版本
- 從2021.0.3版本開始主要是相容Spring Boot 2.7.0及2.6.x版本
Spring Cloud 2022.0(Kilburn版本)
- 要求Spring Boot版本為3.x
Spring Cloud Alibaba版本
2.2.x
對應的是 Spring Cloud Hoxton 與 Spring Boot 2.2.x,最低支援 JDK 1.8
2020.0
對應的是 Spring Cloud 2020 與 Spring Boot 2.4.x,最低支援 JDK 1.8
2021.x
對應的是 Spring Cloud 2021 與 Spring Boot 2.6.x,最低支援 JDK 1.8
2022.x
對應的是 Spring Cloud 2022 與 Spring Boot 3.0.x,最低支援 JDK 17
小結
Spring Framework的主要大版本是6.x,要求JDK17,以之對應的Spring Boot的大版本是3.x,Spring Cloud的大版本是2022.x
doc
- Spring Framework maintenance roadmap in 2020 (including 4.3 EOL)
- Spring Framework 6.0 goes GA
- Spring-Boot-Config-Data-Migration-Guide
- Spring Boot 2.7.0 available now
- Preparing for Spring Boot 3.0
- Spring Tips: the road to Spring Boot 3: Spring Framework 6
- Migrate Application From Spring Boot 2 to Spring Boot 3
- Spring Boot 2.7 Release Notes
- Spring Boot 3.0 Release Notes
- Upgrading to Spring Framework 6.x
- Spring Cloud 2020.0 Release Notes
- Spring Cloud 2021.0 Release Notes
- Spring Cloud 2022.0 Release Notes
- Spring Cloud 2021.0.3 is available. Compatible with Spring Boot 2.7.0
- spring-cloud-alibaba