聊聊Spring Boot幾個版本的區別

codecraft發表於2023-05-05

本文主要研究一下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

相關文章