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

Posted 码农小胖哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot 3.0 正式发布,这份升级指南必须收藏相关的知识,希望对你有一定的参考价值。

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于你而言就是小菜一碟

什么是Spring Boot?

Java (面向对象编程语言)经过30多年的发展,产生了非常多的优秀框架。Spring (为解决企业应用程序开发的复杂性而创建的框架)曾是最受欢迎的Java框架之- , 但随着Node、Ruby、Groovy、PHP等脚本语言的蓬勃发展,使用Spring开发应用就显得烦琐了,因为它使用了大量的XML配置文件,配置烦琐,整合不易,开发和部署效率低下。这时急切需要一种新的能解决这 些问题的快速开发框架,于是Pivotal Software公司在2013开始了Spring Boot的研发。

Spring Boot的设计初衷是解决Spring各版本配置工作过于繁重的问题,简化初始搭建流程、降低开发难度,使开发人员只需要专注应用程序的功能和业务逻辑实现,而不用在配置上花费太多时间。

Spring Boot 使用“默认大于配置”的理念,提供了很多已经集成好的方案,以便程序员在开发应用程序时能做到零配置或极简配置。同时,为了不失灵活性,它也支持自定义操作。

过去经常会有这样的一-种场景: -一个初学者花了半个月时间,看了几本Spring编程书,掌握了最基本的理论知识,但在实际着手开发时,往往被拦截在初始环境配置上,可能花上几天时间也配置不好环境。

笔者曾经就遇到一个这样的开发人员,他竟然花费了一个月时间也没配置好初始环境。这是难以想象的,面对这种烦琐、效率低下的配置和开发工作,甚至会让人怀疑自己的能力。这最终让人非常痛苦,不少人会痛苦地放弃,而能坚持下来的开发人员在开发新项目时依然会面临大量烦琐的配置工作。而使用Spring Boot的体验则完全不- -样,基本是“开箱即用”。

Spring Boot应用程序的开发流程

(1) 安装JDK ( Java Development Kit )开发环境和IDE工具(如: Eclipse、IDEA)。

(2) 在开发工具中,通过项目管理软件Maven (或Gradle )来构建和管理项目。

要使用某个JAR( Java ARchive )包,只需要直接在pom.xml( Gradle项目则是build.gradle )文件中按照约定格式编写,Maven会自动从仓库中下载并配置JAR包依赖,随后可以直接在类中使用它提供的方法。

Spring Boot内置了50多种Starter,以便快速配置和使用。比如,要使用Email 服务,只需要添加“spring-boot-starter-mail" 依赖,然后直接调用JavaMailSender接口发送邮件。

(3)在开发过程中,可以直接在IDE工具中运行和测试,而且不需要搭建Tomcat服务器环境,因为Spring Boot已经内置好了。

(4)在开发完成后,用IDE工具将程序直接编译成JAR包,即可直接在Java运行环境JRE( Java Runtime Environment )下独立运行。如果要在特定的或多环境下部署运行程序,也可以将其打包成WAR ( Web存档文件,包含Web应用程序的所有内容)包。

可见,Spring Boot帮我们省去了烦琐的配置工作,开发人员只需要专注业务逻辑开发即可。

用一句话来说明,即Spring Boot是Spring框架的扩展和自动化。

Spring Boot发展史

2012年10月,Mike Youngstrom提出要在Spring框架中支持无容器的Web应用程序体系结构的要求,这个要求促使Pivotal Software公司在2013年年初开始研发Spring Boot项目。经过1年多的研发, Spring Boot的第1个版本于2014年发布,后续完成了多次的版本迭代。Spring Boot版本的更新情况如下:

  • 2014年4月,Spring Boot 1.0.0发布。
  • 2014年6月,Spring Boot 1.1发布。
  • 2015年3月,Spring Boot 1.2发布。
  • 2016年12月,Spring Boot 1.3发布。
  • 2017年1月,Spring Boot 1.4发布。
  • 2017年2月,SpringBoot1.5发布。.
  • 2018 年3月,Spring Boot2.0发布。,
  • 2018年11月,Spring Boot2.1发布。
  • 2019年3月15日,Spring Boot 2.2.M发布。

 Spring、 Spring Boot、Spring Cloud的关系

Spring

Spring框架(为解决企业应用开发的复杂性而创建的框架)为开发Java应用程序提供了全面的基础架构支持。它提供了依赖注入和“开箱即用”的一些模块, 如: Spring MVC、Spring JDBC、Spring Security、Spring AOP、Spring loC、Spring ORM、Spring Test。这些模块大大地缩短了应用程序的开发时间,提高了开发应用程序的效率。

在Spring出现之前,如果要进行Java Web开发,则非常复杂,例如,若需要将记录插入数据库,则必须编写大量的代码来实现打开、操作和关闭数据库。而通过使用Spring JDBC模块的JDBCTemplate,只需要进行数据操作即可,打开和关闭交由Spring管理。而且实现这些数据操作只需要配置几行代码。

Spring Boot

Spring Boot 是Spring 框架的扩展和自动化,它消除了在Spring中需要进行的XML( EXtensible Markup Language )文件配置(若习惯XML配置,则依然可以使用),使得开发变得更快、更高效、更自动化。

Spring Cloud

Spring Cloud是一套分布式服务治理框架, 它本身不提供具体功能性的操作,只专注于服务之间的通信、熔断和监控等。因此,需要很多组件来共同支持一套功能。 Spring Cloud主要用于开发微服务。

微服务是可以独立部署、水平扩展、独立访问的服务单元。Spring Cloud是这些微服务的“CTO( Chief Technical Officer)",它提供各种方案来维护整个生态。

三者的关系

从上面对三者的介绍中可以看出,Spring Boot其实是要依赖Spring的,并不是另起炉灶创建了一个全新的框架,它是Spring的自动化。Spring Cloud通过依赖Spring Boot来构建微服务应用。三者的关系如图所示。

以上内容只是这本Spring Boot学习笔记中的冰山一角(第一章第一节的前两部分)

笔记全目录

第1章 进入Spring Boot

第2章 准备开发环境

第3章 使用开发工具

第4章 Spring Boot基础

第5章 分层开发Web应用程序

第6章 响应式编程

第7章 Spring Boot进阶

第8章 用ORM操作SQL数据库

第9章 接口架构风格 RESTful

第10章 集成安全框架,实现安全认证和授权

第11章 集成Rods,实现高井发

第12章 集成RbuQ,实现系统间的数据交换

第13章 集成NoSQL数据库,实现搜索引擎

第14章 开发企业级通用的后台系统

第15章 实现一个类似“京东”的电子商务商城

有需要获取到Spring Boot学习笔记的朋友:仅需留意评论即可获取这份阿里大牛的笔记了。

以上是关于Spring Boot 3.0 正式发布,这份升级指南必须收藏的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 学习总结(32)—— Spring Boot 3.0 正式发布

Spring Boot 学习总结(32)—— Spring Boot 3.0 正式发布

Spring Boot 学习总结(32)—— Spring Boot 3.0 正式发布

Spring Boot 3.0 正式发布,王炸!!

Spring Boot 3.0 M1 发布,正式弃用 Java 8,最低要求 Java 17。。。

Spring Boot 3.0正式发布及新特性解读