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