Spring Boot 3.0 现已正式发布,它包含了 12 个月以来 151 个开发者的 5700 多次代码提交。这是自 4.5 年前发布 2.0 以来,Spring Boot 的第一次重大修订。

它也是第一个支持 Spring Framework 6.0 和 GraalVM 的 Spring Boot GA 版本,同时也是第一个基于Java 17的Spring Boot版本,以Jakarta EE 9为基准并支持Jakarta EE 10。同时借助于GraalVM支持了AOT和Native Image。

3.0升级指南

如果你想尝试Spring Boot 3.0,不妨参考胖哥精心准备的升级指南。

升级JDK

首先要升级你的JDK到JDK17,如果你要使用Native Image特性,要使用GraalVM 22.3以上和 Native Build Tools Plugin 0.9.17 或更高的版本。

平滑升级

这里不建议直接从低于Spring Boot 2.7的版本直接升级到Spring Boot 3.0。不然新特性和API变更太多,就需要你修改大量的配置,升级路径会过于陡峭。建议通过小版本号分阶段升级到2.4、2.6、2.7,最后再到3.0。

依赖评估

Spring Boot3.0下依赖组件的版本要求也不尽相同,比如Spring Boot Kafka Starter可能对Kafka有什么要求,这要求你进行充分评估。Spring Cloud体系应该在对应的Spring Boot 3.0体系发布后进行升级。

升级到Spring Boot 3

一旦上面的工作准备完毕,你就可以开始尝试升级到Spring Boot 3.0了。

配置属性兼容

在Spring Boot 3.0中,一些配置属性被重新命名/删除了,开发人员需要相应地更新他们的application.properties或者application.yml。为了帮助你做到这一点,Spring Boot 3.0提供了一个spring-boot-properties-migrator模块。一旦作为依赖关系添加到你的项目中,它不仅会在启动时分析你的应用程序的环境并打印诊断结果,而且还会在运行时为你临时迁移属性。把下面这个加入pom.xml以帮助你升级兼容配置属性:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-properties-migrator</artifactId><scope>runtime</scope>
</dependency>

完成迁移之后,务必要移除spring-boot-properties-migrator依赖。

Jakarta EE

由于Java EE已经变更为Jakarta EE,包名以 javax开头的需要相应地变更为jakarta。这里建议通过Intellij IDEA 2021.2提供的内置功能批量处理即可:

当然你也可以手动去变更包名。

升级的关键变更

Spring Boot 3.0有一些关键改变,这些改变将与大多数应用程序有关。所以开发者要仔细阅读这些变更。

图片Banner不再支持

现在Spring Boot 3.0自定义Banner只支持文本类型(banner.txt),不再支持图片类型。

日志日期格式变更

Logback和Log4j2的日志消息的日期和时间部分的默认格式已经改变,以符合ISO-8601标准。新的默认格式yyyy-MM-dd'T'HH:mm:ss.SSSXXX使用T来分隔日期和时间,而不是空格字符,并在最后添加时区偏移。LOG_DATEFORMAT_PATTERN环境变量或logging.pattern.dateformat属性可以用来恢复以前的默认值yyyy-MM-dd HH:mm:ss.SSS

ConstructingBinding注解

配置属性类注解@ConfigurationProperties默认情况下不再需要使用@ConstructorBinding来标记构造,你应该从配置类上移除它,除非该配置类多个构造函数来明确配置属性绑定。

YamlJsonParser被移除

因为SnakeYAMLJSON解析与其他解析器的实现不一致。如果你直接使用YamlJsonParser,请迁移到其他JsonParser实现中。

自动配置文件变更

Spring Boot 2.7引入了一个新的文件:

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

用于注册自动配置,同时保持与 spring.factories 中注册的向后兼容。Spring Boot 3.0发布后,spring.factories已经被移除,只能通过imports文件来注册自动配置。

Web应用变更
路径匹配

现在Spring MVC和Spring Webflux 的路径匹配规则已经做了调整,默认情况下尾部斜杠/的匹配机制将和以前不同:

  • 3.0以前/foo/bar等同于/foo/bar/

  • 3.0以后/foo/bar不同/foo/bar/

弃用配置 server.max-http-header-size

server.max-http-header-size已经被弃用,现在用server.max-http-request-header-size替代 ,并且现在该属性只能来配置请求头的大小,不再限制某些Web容器的响应头大小,如果需要限制响应头大小请通过自定义WebServerFactoryCustomizer来实现。

优雅停机阶段变更

优雅停机由SmartLifecycle实现,在SmartLifecycle.DEFAULT_PHASE - 2048阶段开始,Web服务器在SmartLifecycle.DEFAULT_PHASE - 1024阶段停止。任何参与优雅关机的SmartLifecycle实现都应该被相应地更新。

Jetty

由于Jetty目前还不支持Servlet 6.0,使用Jetty的开发者需要通过降低Jakarta Servlet的版本为5.0。

数据访问相关的变更

spring.data前缀已被保留给Spring Data项目,如果你使用了Spring Data项目的子项目,application.yaml中相关的配置属性就需要响应的变更。例如 spring.redis现在需要修改为spring.data.redis

数据访问相关的组件现在都使用了比较新的版本:

  • Flyway更新到 9.0

  • Hibernate 更新到 6.1

  • R2DBC 更新到 1.0

Mongodb

另外 Flapdoodle 嵌入式 MongoDB 的自动配置被移除,开发者有需要的话需要自行引入。

Elasticsearch

Elasticsearch的Rest客户端采用了新的API实现,旧的自动配置和Spring Data Elasticsearch中旧的客户端API已经被移除。

Spring Security

相关的变更,胖哥稍后会整理并独立分享。

其它变更

可观测性、度量跟踪、Maven、Gradle也都有不同程度的变更,有需要可以查看官方的Spring-Boot-3.0-Migration-Guide 。

记得收藏这一篇,后续胖哥会深入Spring 6.0和Spring Boot 3.0的细节部分。

Spring Boot 3.0 正式发布,这份升级指南必须收藏相关推荐

  1. Spring Boot 2.0 正式发布

    转载自 重磅:Spring Boot 2.0 正式发布! Spring Boot 2.0 正式发布! 2018/03/01最新消息,传得沸沸扬扬的Spring Boot 2.0 正式发布了. 小编去看 ...

  2. Spring Boot 2.0正式发布,升还是不升呢?

    Spring帝国 Spring几乎是每一位Java开发人员都耳熟能详的开发框架,不论您是一名初出茅庐的程序员还是经验丰富的老司机,都会对其有一定的了解或使用经验.在现代企业级应用架构中,Spring技 ...

  3. 【译】Spring Boot 2.0 官方迁移指南

    前提 希望本文档将帮助您把应用程序迁移到 Spring Boot 2.0. 在你开始之前 首先,Spring Boot 2.0 需要 Java 8 或更高版本.不再支持 Java 6 和 7 了. 在 ...

  4. Spring Boot 2.0选择HikariCP作为默认数据库连接池的五大理由

    转载自公众号:工匠小猪猪的技术世界 摘要: 本文非原创,是「工匠小猪猪的技术世界」搜集了一些HikariCP相关的资料整理给大家的介绍,主要讲解了为什么sb2选择了HikariCP以及HikariCP ...

  5. Spring Boot 2.0 新特性(二):新增事件ApplicationStartedEvent

    今天继续来聊Spring Boot 2.0的新特性.本文将具体说说2.0版本中的事件模型,尤其是新增的事件: ApplicationStartedEvent. 原文首发:http://blog.did ...

  6. Spring Boot 1.0 升级到 2.0 的时候遇到一些问题

    将云收藏从 Spring Boot 1.0 升级到 2.0 的时候也遇到了一些问题,在修改的过程中记录下来,今天整理一下分享出来,方便后续升级的朋友少踩一些坑. 1.第一个问题:启动类报错 Sprin ...

  7. Spring Boot 3.0.0 发布第一个里程碑版本M1,你的 Java 升到 17 了吗?

    欢迎关注方志朋的博客,回复"666"获面试宝典 ‍ ‍文章来源:程序猿DD‍ ‍ 2022年1月20日,Spring官方发布了Spring Boot 3.0.0的第一个里程碑版本M ...

  8. SpringBoot2.0(一):【重磅】Spring Boot 2.0权威发布

    就在昨天Spring Boot2.0.0.RELEASE正式发布,今天早上在发布Spring Boot2.0的时候还出现一个小插曲,将Spring Boot2.0同步到Maven仓库的时候出现了错误, ...

  9. Spring Boot 2.0 迁移指南

    点击上方"朱小厮的博客",选择"设为星标" 回复"666"获取新整理的1000+GB资料 前提 本文档将帮助您把应用程序迁移到 Spring ...

最新文章

  1. 2021年大数据Kafka(十):kafka生产者数据分发策略
  2. windows cannot ftp_免费自动FTP同步软件,6步掌握免费自动FTP同步软件的安装方法...
  3. torch torchvision 下载安装与使用
  4. ASP.NET Core 认证与授权[4]:JwtBearer认证
  5. 【Hibernate一】概述及入门
  6. php 白名单,php实现ip白名单黑名单功能
  7. 印尼商品期货交易监管局考虑对加密货币交易征税
  8. Linux平台OpenGL之helloworld(十)
  9. 【产品必备软件合集】
  10. 我读《DOOM启世录》——成为一个真正厉害的人
  11. 常用股票软件linux,在 Linux 下看股票?
  12. cad命令栏怎么调出来_中望CAD菜单栏和功能栏都消失怎么办
  13. 商品信息mysql设计_电商-商品信息 - 数据库设计 - 数据库表结构 - 果创云
  14. linux中括号 美元符号怎么打,键盘输入美元符号
  15. Hdu4747 Mex 递推
  16. asp.net 下载文件几种方式
  17. MacBook使用HHKB键盘设置
  18. 七牛上传图片初探 开始上传 暂停上传 继续上传
  19. M580PLC以太网读通讯和写通讯
  20. RSA分段加密分段解密以及密钥与.Net的转化

热门文章

  1. 解析新浪微博JSON
  2. Spring入门实例
  3. 1.Spring入门
  4. 百度主动推送怎么用?
  5. SPSS--回归-多元线性回归模型案例解析!(一)
  6. 多线程处理大数据量查询
  7. 微信小程序如何使用解析 nbsp; lt; gt; amp; apos; ensp; emsp;等字符?
  8. 开发openfire的内部组件
  9. qsort函数用法 + 模拟实现qsort函数
  10. 计算机毕业设计Java乒乓球俱乐部管理(源码+系统+mysql数据库+lw文档)