目录
2.3
2.4
2.5
2.6
2.7
1、最低要求变更
Gradle 6.3+(如果您使用 Gradle 构建)。
Jetty 9.4.22+(如果您使用 Jetty 作为嵌入式容器)
2、jdk支持
添加了对 Java 14 的支持。也支持 Java 8 和 11。
3、ElasticSearch
Native Elasticsearch transport 已被删除,默认使用Elasticsearch 7.5+。
4、MongoDB
切换到mongodb4,并适配 reactive 和 imperative drivers。如果你使用 `spring-boot-starter-data-mongodb-reactive` 并且需要在启动时使用imperative infrastructure (e.g. `MongoOperations`), 请考虑添加 `spring-boot-starter-data-mongodb`依赖.
5、JDBC
在其新特性中,Spring Data JDBC 2.0 现在默认引用标识符。可以通过调用RelationalMappingContext setForceQuote(false) 来禁用此行为。
6、Jackson
升级到jackson2.11,主要是date格式变更,详见https://github.com/FasterXML/jackson-databind/issues/2643
7、Docker 容器
添加了部分功能用来帮助将 Spring Boot 应用直接打包到 Docker 镜像。
|
重新打包的 jar 分别在 BOOT-INF/classes 和中包含应用程序的类和依赖项 BOOT-INF/lib。对于需要从 jar 的内容中构建 docker 映像的情况,能够进一步分隔这些目录,以便可以将它们写入不同的层是很有用的。
分层其实只是逻辑上的抽象而已。打出的 jar 包结构如下(jar 包其实就是个压缩包,可以解压缩查看目录结构)
Buildpacks 打镜像包会使用缓存的,如果这一层没变那就不用重新打这一层,只需要重新打包修改过的层,这样一来,如果你只修改了 application 中的内容,比如新加了 Controller 或者配置文件等,那么只需要重新打包这一层,也就是几 K,几十 K 不会很大,这样一来打包速度就很快了,要不然一个上百兆的镜像包也得需要一段时间。
分层的 jar 使用与常规重新打包的 jar 相同的布局,但是包括一个描述每个图层的附加元数据文件。要使用此功能,必须启用分层功能:
|
8、支持配置文件的通配符位置
加载配置文件时支持通配符位置。默认情况下,config/*/ 支持 jar 外部的通配符位置。当有多个配置属性源时,这在 Kubernetes 等环境中很有用。例如,如果你有单独的 mysql 和 redis 配置,如果你把它们放在 /config、 /config/mysql/application.properties 和 /config/redis/application.properties。
9、镜像打包分层 Jar
原创 Spring Boot 2.3 新特性分层JAR_pig_冷冷的博客-CSDN博客_springboot 分层jar
10、优雅停机
在 2.3 之前 tomcat 容器被关闭时会被直接关闭,当我们流量请求到此接口执行业务逻辑的时候,若服务端此时执行关机 ,spring boot 默认情况会直接关闭容器(tomcat 等),导致此业务逻辑执行失败。在一些业务场景下:会出现数据不一致的情况,事务逻辑不会回滚。
|
在最新的 spring boot 2.3 版本,内置此功能,不需要再自行扩展容器线程池来处理, 目前 spring boot 嵌入式支持的 web 服务器(Jetty、Reactor Netty、Tomcat 和 Undertow)以及反应式和基于 Servlet 的 web 应用程序都支持优雅停机功能。 我们来看下如何使用:当使用 server.shutdown=graceful 启用时,在 web 容器关闭时,web 服务器将不再接收新请求,并将等待活动请求完成的缓冲期。
11、R2DBC 支持
当 r2dbc 在类路径上时, aConnectionFactory会自动配置为与 jdbc 类似的安排DataSource。如果 Spring Data 在类路径上,存储库也会像往常一样自动配置。
R2DBC 支持还为连接工厂、度量标准ConnectionPool和测试切片添加了一个健康指标,@DataR2dbcTest.
12、Web 应用程序中的日期时间转换
Web 应用程序中时间和日期时间值的转换现在可以通过应用程序属性进行配置。这补充了对格式化日期值的现有支持。对于 MVC,属性分别是spring.mvc.format.time
和spring.mvc.format.date-time
。对于 WebFlux,属性分别是spring.webflux.format.time
和spring.webflux.format.date-time
。
除了采用典型的格式化模式之外,用于配置日期、时间和日期时间格式的属性现在支持iso
. 设置后,将应用相应的 ISO-8601 格式。
以下属性支持这些iso
值:
spring.mvc.format.date
spring.mvc.format.date-time
spring.mvc.format.time
spring.webflux.format.date
spring.webflux.format.date-time
spring.webflux.format.time
13、Spring Cloud 连接器启动器已被删除
Spring Cloud Connectors starter在 2.2 中被弃用,取而代之的是 Java CFEnv。此 starter 已被删除,Spring Cloud Connectors 依赖项不再包含在 Spring Boot 的托管依赖项中。
14、活力和准备情况探针
Spring Boot 2.3具有应用程序可用性的内置知识,可以跟踪应用程序是否处于活动状态以及是否已准备好处理流量。查看此博客文章以了解更多详细信息。
15、依赖升级
springboot2.3迁移到几个Spring项目的新版本:
Spring Data Neumann
Spring HATEOAS 1.1
Spring Integration 5.3
Spring Kafka 2.5
Spring Security 5.3
Spring Session Dragonfruit
许多第三方依赖项也已更新,其中一些更值得注意的是:
Artemis 2.12
AssertJ 3.16
Cassandra Driver 4.6
Couchbase Client 3.0
Elasticsearch 7.6
Flyway 6.4
Hibernate Validator 6.1
Infinispan 10.1
Jackson 2.11
JUnit Jupiter 5.6
Kafka 2.5
Kotlin 1.3.72
Lettuce 5.3
Micrometer 1.5
Mockito 3.3
MongoDB 4.0
QueryDSL 4.3
更多变更参阅:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.3-Release-Notes
1、jdk支持
支持Java 15。支持的最低版本仍然是 Java 8。
2、版本控制方案更改
从2.4开始, Spring Boot 采用 [新的Spring版本控制方案] - 这意味着您应该在 `build.gradle`/`pom.xml` 文件中 将 `2.3.5.RELEASE` 更新为 `2.4.0`.
3、解除默认加载 bootstratp 配置文件
升级到 2.4 之后,spring.cloud.bootstratp.enabled 默认为 false,不再支持自动读取 bootstratp 配置文件,需要加依赖
|
如果依旧用 2.4 版本之前的逻辑,需要额外配置
|
4、配置数据项迁移指南
Spring Boot 2.4 对文件 application.properties
和 application.yml
文件的处理方式进行了彻底改革。更新的逻辑旨在简化和合理化加载外部配置的方式。它还使我们能够提供新功能,例如 spring.config.import
支持,但有些参数的组合形式却得到了限制,升级请谨慎。
如果你的应用工程只有一个简单的 application.properties 或 application.yml 文件,则可以进行无缝升级到 Spring Boot 2.4.0。
但是,如果你的配置较为复杂,比如说有指定 profile 的参数,或者有基于 profile 激活的参数,要使用新功能就需要进行一些更改。
如果没有准备升级迁移,只是想升级一下 springboot 版本也可以使用之前的配置数据数据逻辑,则需要切换回旧模式,为此,您应该将该 spring.config.use-legacy-processing
属性设置为 true
该属性需要在 Spring 中设置 Environment
。最简单的方法通常是将其添加到 jarapplication.properties
或 application.yml
内部。
例如,你可以有一个 src/main/resources/application.properties
如下:
|
如果想要升级 2.4 之后的新配置逻辑,如:
|
则替换为:
|
生产环境启动命令依旧不变:
|
组合命令 2.4 之前
|
2.4 组合命令之后:
|
5、配置文件属性获取新增 @Name
|
6、移除了 JUnit 5’s Vintage 引擎
Spring Boot 2.4.0 从 spring-boot-starter-test 中移除了 JUnit 5 Vintage 引擎,JUnit 5 可以通过 vintage 引擎来运行 JUnit 4 编写的测试用例,说白了就是兼容 JUnit 4 呗。如果你不想迁移测试用例到 JUnit 5 而继续使用 JUnit 4,添加以下 Maven 依赖即可:
|
7、回滚配置属性
特定于 Logback 的日志属性已被重命名以反映它们是特定于 Logback 的事实。以前的名称已被弃用。
以下 Spring Boot 属性已更改:
|
与它们映射到的系统环境属性一样:
|
8、默认 Servlet 注册
Spring Boot 2.4 将不再注册 您的 servlet 容器提供的DefaultServlet
。在大多数应用程序中,它不被使用,因为 Spring MVCDispatcherServlet
是唯一需要的 servlet。
如果您发现仍然需要默认的 servlet 则可以设置server.servlet.register-default-servlet为
true
。
9、默认情况下,HTTP 跟踪不再包含 cookie 标头
|
10、Docker 支持升级
当使用 Spring Boot 构建时,可以为构建器或者运行镜像使用私有授权的 Docker 私有注册中心,支持用户名 / 密码认证以及基于 Token 机制认证。
11、Redis Cache Metrics
如果您使用 Redis 缓存,您现在可以通过 Micrometer 公开缓存统计信息。记录的指标包括放置、获取和删除的数量以及未命中数。挂起请求的数量和锁定等待持续时间也被记录下来。
要启用该功能,请将 `spring.cache.redis.enable-statistics` 设置为 `true`。
12、R2DBC
R2DBC 的核心基础架构已移至带有新spring-r2dbc
模块的 Spring Framework。如果您正在使用此基础架构,请确保将弃用的访问权限迁移到新的核心支持。
13、新增启动端点
Spring Boot 2.4.0 添加了一个新的启动端点,用来显示应用启动有关的详细信息,比如可以帮助我们来诊断启动时间比预期更长的 Spring Beans。
这个功能建立在 Spring Framwork 5.3 最近添加的应用程序启动跟踪特性的基础上,感兴趣的可以在 Spring 框架文档中阅读有关该功能的更多信息。
Core Technologies
14、新增起源链(Origin Chains)
Origin 接口使用了全新的 getParent() 方法,可以提供完整的参数起源链,以准确显示某一项参数的来源。
比如你在 application.properties 配置文件中使用 spring.config.import 来导入第二个配置文件的参数,从第二个配置文件加载的参数的 Origin 将具有一个指向原始导入声明的父级。
说白了就是可以看到参数从哪里导进来的,可以通过 actuator/env 或者 actuator/configprops 端点来查看与之相关的输出信息。
15、依赖升级
Spring Boot 2.4迁移到几个Spring项目的新版本:
- Spring AMQP 2.3
- Spring Batch 4.3
- Spring Data 2020.0 ([changelog])
- Spring Framework 5.3 ([what's new] | [upgrading])
- Spring Integration 5.4
- Spring HATEOAS 1.2
- Spring Kafka 2.6
- Spring Retry 1.3
- Spring Security 5.4
- Spring Session 2020.0
许多第三方依赖项也已更新,其中一些更值得注意的是:
- Artemis 2.13
- AssertJ 3.18
- Cassandra Driver 4.7
- Elasticsearch 7.9
- Flyway 7
- Jersey 2.31
- JUnit 5.7
- Liquibase 3.10
- Lettuce 6.0
- Micrometer 1.6
- Mockito 3.4
- MongoDB 4.1
- Oracle Database 19.7
- Reactor 2020.0
- RSocket 1.1
- Undertow 2.2
更多变更参阅:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.4-Release-Notes
1、jdk支持
此版本提供支持并针对 Java 16 进行了测试。Spring Boot 2.5 仍然与 Java 8 兼容。
2、最低要求变更
使用 Gradle 构建的项目现在需要 Gradle 6.8 或更高版本。并支持Gradle7.X。
3、Spring Data JPA
Spring Data JPA 引入了一种新 getById 方法来取代 getOne. 如果您发现您的应用程序正在抛出一个 LazyLoadingException 请将任何现有 getById 方法重命名为 getXyzById(其中 xyz 是任意字符串)。
4、Spring Data Solr
在 2021.0.0 从 Spring Data 中删除之后,此版本中删除了 Spring Data Solr 的自动配置。
5、环境变量前缀
现在可以为系统环境变量指定前缀,以便您可以在同一环境中运行多个不同的 Spring Boot 应用程序。使用 SpringApplication.setEnvironmentPrefix(… ) 设置要绑定属性时要使用的前缀。
例如,以下将添加 myapp 前缀:
|
所有属性现在都需要一个带前缀的版本。例如,要更改服务器端口,您可以设置 MYAPP_SERVER_PORT。
6、基于 TCP 的 HTTP/2 (h2c)
所有四个嵌入式 Web 容器现在都支持 HTTP/2 over TCP (h2c),无需任何手动定制。要启用 h2c,请设置 server.http2.enabled 为 true 并保留 server.ssl.enabled 设置为 false(其默认值)。
7、War 分层
Spring Boot Maven 和 Gradle 插件现在允许您创建分层 WAR 以与 Docker 映像一起使用。分层 WAR 的工作方式与早期版本的 Spring Boot 中提供的分层 JAR 支持类似。
8、MongoDB 指标
使用 Actuator 时,Mongo 连接池的指标和客户端发送的命令现在会自动生成。要了解有关 MongoDB 指标的更多信息,请参阅参考文档的相关部分。
9、Groovy 3
Groovy 的默认版本已升级到 3.x。如果您在使用 Groovy 和 Spock,您还应该升级到最新的 Groovy 3.0 兼容版本的 Spock 2.0。或者,使用 `groovy.version` 降级回 Groovy 2.5。
10、Hibernate Validator 6.2
Hibernate Validate 的默认版本已升级到 6.2.x。 Hibernate Validator 6.2 更改了表达式语言用于插入约束消息的方式. 参阅 https://in.relation.to/2021/01/06/hibernate-validator-700-62-final-released/[this blog post from the Hibernate Validator team] 获取详情.
11、Jetty 10 Support
Spring Boot 2.5 现在可以使用 Jetty 10 作为嵌入式 Web 服务器。
Jetty 10 尚不支持 WebSocket。
由于 Jetty 10 需要 Java 11,我们的默认 Jetty 版本将保持为 9。
要升级到 Jetty 10,请使用 `jetty.version` 属性来覆盖版本。
您还应该从 `spring-boot-starter-jetty` 中排除 `org.eclipse.jetty.websocket:websocket-server` 和 `org.eclipse.jetty.websocket:javax-websocket-server-impl`,因为它们是 Jetty 9 -具体的。
12、使用 R2DBC 初始化数据库
添加了对通过 R2DBC 访问的 SQL 数据库的基于脚本的初始化的支持。默认情况下,类路径上的脚本命名为schema.sql
并将data.sql
自动应用于数据库。可以使用spring.sql.init.*
配置属性自定义初始化。有关详细信息,请参阅参考文档。
13、Docker 镜像构建支持
自定义构建包
Maven 和 Gradle 插件现在都支持使用自定义 Buildpack。您可以将该buildpacks
属性设置为指向目录、tar.gz 文件、特定构建器引用或 Docker 映像。
有关更多详细信息,请参阅更新的Gradle和Maven参考文档。
绑定
Maven 和 Gradle 插件现在都支持可以传递给 buildpack 构建器的卷绑定。这些允许您绑定本地路径或卷以供 buildpack 使用。
有关更多详细信息,请参阅更新的Gradle和Maven参考文档。
war
Maven 和 Gradle 插件现在都可以将可执行的 war 文件打包到 Docker 镜像中。如果你想为你的战争创建一个 Docker 镜像,应该使用现有的mvn spring-boot:image
or命令。./gradlew bootBuildImage
14、依赖升级
SpringBoot2.5迁移到几个Spring项目的新版本:
- [Spring Data 2021.0]
- [Spring Integration 5.5]
- [Spring Security 5.5]
- Spring Session 2021.0
- Spring HATEOAS 1.3
- [Spring Kafka 2.7.0]
许多第三方依赖项也已更新,其中一些更值得注意的是:
- Kotlin 1.5
- Groovy 3.0
- Flyway 7.7
- Liquibase 4.3
- Jackson 2.12
- Kafka 2.7
- Cassandra Driver 4.10
- Embedded Mongo 3.0
- Hibernate Validator 6.2
- Jersey 2.33
- Mockito 3.7
- MongoDB 4.2
- JUnit Jupiter 5.7
- Elasticsearch 7.12
更多变更参阅:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.5-Release-Notes
1、默认禁止的循环引用
现在默认禁止 bean 之间的循环引用
|
|
报错
|
如果想要关闭循环引用,则配置文件
|
2、端点新增运行时 Java 信息
|
3、默认禁用执行器环境信息
|
可通过该链接了解 SpringBoot Actoator
4、Redis 连接池
当 commons-pool2 在类路径下时,Redis(包括:Jedis 和 Lettuce)支持自动开启连接池。
也可以设置禁用连接池:
|
或
|
5、启动信息新增指标
|
6、磁盘空间指标
|
7、SpringMVC 默认路径匹配策略
Spring MVC 处理程序映射匹配请求路径的默认策略已从 AntPathMatcher 更改为 PathPatternParser
PathPattern 性能比 AntPathMatcher 好。理论上 pattern 越复杂,PathPattern 的优势越明显
如果需要将默认值切换回 AntPathMatcher,可设置如下属性
|
8、构建信息个性化
通过 spring-boot-maven-plugin 支持自动生成此次构建信息的 build-info.properties
|
9、移除 2.4 中的属性
Spring MVC 和 servlet 部分属性已被删除
新属性 | 旧属性(已删除) |
spring.web.locale | spring.mvc.locale |
spring.web.locale-resolver | spring.mvc.locale-resolver |
spring.web.resources.* | spring.resources.* |
management.server.base-path | management.server.servlet.context-path |
10、支持配置 Cookie SameSite
|
11、网络资源配置
直接注入Resources不再起作用,因为此配置已在WebProperties. 如果您需要访问此信息,则需要注入WebProperties。13、嵌入式 Mongo要使用嵌入式 mongo,现在必须设置spring.mongodb.embedded.version属性。这有助于确保嵌入式支持使用的 MongoDB 版本与您的应用程序将在生产中使用的 MongoDB 版本相匹配。
12、支持自定义脱敏规则
Spring Boot 现在可以清理 /env 和 /configprops 端点中存在的敏感值。
另外,还可以通过添加类型为 SanitizingFunction 的 @Bean 类来配置自定义清理规则。
13、Elasticsearch 属性整合
用于配置 Elasticsearch 客户端的配置属性已被整合。以前,用于配置阻塞高级 REST 客户端和反应式 REST 客户端的许多通用属性在spring.elasticsearch.rest
和spring.data.elasticsearch.clients.reactive
.
如果您使用的是阻塞 REST 客户端,下表列出了旧属性及其替换:
已弃用的属性 |
替代品 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
如果您使用的是响应式客户端,下表列出了旧属性及其替换:
已弃用的属性 |
替代品 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14、Docker 镜像构建支持
附加图像标签
tags
Maven 和 Gradle 插件现在支持在使用配置参数构建生成的图像后应用附加标签。
有关更多详细信息,请参阅更新的Gradle和Maven参考文档。
网络配置
network
Maven 插件spring-boot:build-image
目标和 GradlebootBuildImage
任务中添加了一个配置参数。此参数可用于配置运行 Cloud Native Buildpacks 构建器进程的容器使用的网络驱动程序。
缓存配置
Maven 和 Gradle 插件现在支持自定义卷的名称,这些卷用于缓存由 buildpack 使用buildCache
和launchCache
配置参数贡献给构建映像的层。
有关更多详细信息,请参阅更新的Gradle和Maven参考文档。
15、依赖升级
Spring Boot 2.6 迁移到几个 Spring 项目的新版本:
Spring Security 5.6
Spring Data 2021.1
Spring HATEOAS 1.4
Spring Kafka 2.8
Spring AMQP 2.4
Spring Session 2021.1.0
许多第三方依赖项也已更新,其中一些更值得注意的是:
Apache Kafka 3.0
Artemis 2.19
Cassandra Driver 4.13
Commons DBCP 2.9
Commons Pool 2.11
Couchbase Client 3.2.2
Elasticsearch 7.15
Flyway 8.0.5
Hibernate 5.6
JUnit Jupiter 5.8
Jedis 3.7
Kafka 3.0
Kotlin 1.6
Liquibase 4.5
Micrometer 1.8
Mockito 4.0
MongoDB 4.4
Postgresql 42.3
QueryDSL 5.0
SnakeYAML 1.29
Thymeleaf Layout Dialect 3.0
更多变更参阅:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.6-Release-Notes
1、新的 @AutoConfiguration 注解
|
2、自动配置注册
|
3、OkHttp 4
由于不再维护 OkHttp 3,Spring Boot 2.7 已升级到 OkHTTP 4。作为此次升级的一部分,
用于控制OkHttp版本的属性已从更改okhttp3.version为okhttp.version
OkHttp4旨在向后兼容 OkHttp 3。如果您的应用程序不是这种情况,或者出于其他原因希望继续
使用OkHttp3,okttp.version 请在构建中配置该属性。
4、Flyway
Spring Boot 2.7 升级到 Flyway 8.5(从 8.0)。从 8.0 版本开始,Flyway 对多个数据库的支持被提取到了新的模块中:
flyway-firebird
flyway-mysql(MariaDB 和 MySQL)
flyway-sqlserver(SQL 服务器)
如果您使用 Flyway 管理上述数据库之一的架构,请添加对相应新模块的依赖项。
5、spring.mongodb.embedded.features配置属性已删除
Embedded Mongo 3.4 已放弃对配置 Mongo 功能的支持。spring.mongodb.embedded.features配置属性已被删除。如果需要启动 Mongo 的高级配置,需要自定义MongodbConfig bean
6、MongoDB 属性优先级
以前,如果spring.data.mongodb.uri与任何等效的单独属性(例如spring.data.mongodb.host和)一起配置,spring.data.mongodb.port则会引发异常。该uri属性 -spring.data.mongodb.uri现在优先于任何单独的属性,设置时其他单独属性会被忽略。
7、对 Elasticsearch 的 RestHighLevelClient 的支持已弃用
由于Elasticsearch 已弃用其RestHighLevelClient. 与此一致,Spring Boot 的自动配置RestHighLevelClient已被弃用。在可能的情况下,应使用自动配置的低级别RestClient。或者,考虑手动配置新客户端。
8、R2DBC 驱动程序更改
在Borca 版本中,PostgreSQL 驱动程序的组 IDr2dbc-postgresql已从 io.r2dbc更改为org.postgresql。MySQL 的驱动程序r2dbc-mysql,已被删除。可以使用r2dbc-mariadb用作替代品。
9、支持 RabbitStreamTemplate
RabbitStreamTemplate如果使用该spring.rabbitmq.stream.name属性设置流名称,则自动配置A。提供了RabbitStreamTemplateConfigurer,类似于RabbitTemplateConfigurer在保留自动配置的同时自定义其他实例。
10、@SpringBootTest 属性源优先级
@SpringBootTest通过使用properties属性或注释添加的测试属性源@TestPropertySource现在添加到命令行属性源上方。如果不太可能同时使用propertiesand和args(并且具有相同的属性名称),需要进行更改。
11、Docker 镜像构建
Podman 支持
Maven 和 Gradle 插件现在支持在使用 Cloud Native Buildpacks 构建映像时使用 Podman 容器引擎作为 Docker 引擎的替代方案。
有关更多详细信息,请参阅更新的Gradle和Maven参考文档。
12、依赖升级
Spring Boot 2.7 迁移到几个 Spring 项目的新版本:
Spring Data 2021.2
Spring HATEOAS 1.5
Spring LDAP 2.4
Spring Security 5.7
Spring Session 2021.2
许多第三方依赖项也已更新,其中一些更值得注意的是:
Elasticsearch 7.17
Flyway 8.5
H2 2.1
Infinispan 13
Json 2.9
Json Path 2.7
Kafka 3.1
MariaDB 3.0
Micrometer 1.9
MongoDB 4.5
OkHTTP 4.9
REST Assured 4.5
R2DBC Borca
更多变更参阅:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.7-Release-Notes