史上最全 SpringBoot 2.3.0.RELEASE 版本特性介绍(全文英译版)

Spring Boot v2.3.RELEASE

参考链接:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.3-Release-Notes#new-and-noteworthy

For full upgrade instructions and new and noteworthy features please see the release notes.

Spring Boot 2.3 Release Notes

Upgrading from Spring Boot 2.2

Changes to minimum requirements

Spring Boot 现在要求:

Gradle 6.3+ (如果你正在用Gradle构建). 5.6.x 也支持,但已弃用。

Jetty 9.4.22+ (如果您使用Jetty作为嵌入式容器)

Validation Starter no longer included in web starters

#19550开始,Web和WebFlux启动器默认不再依赖于验证启动器。例如,如果您的应用程序正在使用验证特性,您会发现javax.validation.* imports没有被解析,你需要自己添加启动器。

对于Maven构建,可以使用以下方法实现这一点:

对于Gradle,你需要添加这样的东西:


Spring Data Neumann

Spring Boot 2.3附带了一个主要的Spring Data发布。如果您正在使用Cassandra、Couchbase、Elasticsearch、MongoDB或JDBC,则需要格外小心。

Cassandra

这个版本切换到Cassandra v4,它带来了许多向后不兼容的更改。如果您依赖于ClusterBuilderCustomizer来定制集群,这个概念在v4中已经不存在了,并且已经被两个更特定的定制器所取代:

DriverConfigLoaderBuilderCustomizer 自定义驱动程序的属性。请将此用于尚未公开的任何属性。

CqlSessionBuilderCustomizer 定制 CqlSession (以前的Session).

Cassandra v4驱动从接触点不再有自动本地直流推断。因此,必须使用默认的负载均衡策略设置“local-datacenter”属性,并且联络点必须是该数据中心的。一个新的 spring.data.cassandra.local-datacenter 属性已经被添加以方便设置本地数据中心。

Couchbase

这个版本切换到Couchbase SDK v3,它带来了许多向后不兼容的更改。

要连接到集群,您现在应该使用spring.couchbase.connection-string,而不是以前的spring.couchbase.bootstrap-hosts。

基于角色的访问控制现在已经普遍化了。

Spring Boot不再自动配置Bucket,但是您可以使用集群API轻松地做到这一点。

端点的IO配置已经在spring.couchbase.env.io中得到了协调。

如果您正在扩展CouchbaseConfiguration以自定义环境,请使用ClusterEnvironmentBuilderCustomizer以一种更习惯的方式来这样做。

如果使用 Spring Data Couchbase,则需要提供一个桶名。

Elasticsearch

已弃用的本地Elasticsearch传输已经被移除,因为Elasticsearch和Spring Data在它们的下一个版本中都不支持它。在这个版本中,对Jest库的支持也被删除了。

Spring Boot 默认要求使用Elasticsearch 7.5+。

MongoDB

该版本切换到MongoDB 4,并协调了响应式和命令式驱动程序。如果你用的是启动器,这对你来说应该是相当透明的。

有了这种协调,如果您使用spring-boot-starter-data-mongodb-reactive,就不再提供无响应的基础设施。如果你需要在启动时使用命令式基础架构(例如MongoOperations),可以考虑添加spring-boot-starter-data-mongodb。

Neo4j

默认情况下,Neo4j的open session in view interceptor现在是禁用的。如果需要再次启用它,请使用标准的spring.data.neo4j.open-in-view属性。

Neo4j运行状况指示器的详细信息现在包含版本和服务器的版本,示例如下:

JDBC

在它的新特性-new features中,Spring Data JDBC 2.0现在默认引用标识符。这个行为可以通过在RelationalMappingContext上调用setForceQuote(false)来禁用。

Micrometer

这个版本升级到Micrometer 1.5,带来了一些反对的地方:

服务水平协议-Service Level Agreements已被重命名为服务水平目标-Service Level Objectives ,边界表示为double而不是long。

波前-Wavefront 度量现在通过WavefrontSender导出。因此,读取和连接超时属性不再受到尊重。

Jackson

This release upgrades to Jackson 2.11 which includes a change to the default formatting of java.util.Date and java.util.Calendar. Please seeFasterXML/jackson-databind#2643for details.

这个版本升级到Jackson 2.11,其中包括对 java.util.Date和java.util.Calendar的默认格式的更改。详情请查看FasterXML/jackson-databind#2643

Spring Cloud Connectors starter has been removed

The Spring Cloud Connectors starter wasdeprecated in 2.2 in favor of Java CFEnv. This starter has been removed, and Spring Cloud Connectors dependencies are no longer included in Spring Boot’s managed dependencies.

Spring Cloud Connectors starter在2.2中已弃用,取而代之的是Java CFEnv-deprecated in 2.2 in favor of Java CFEnv。这个启动器已经被删除,Spring Cloud连接器依赖项也不再包含在Spring Boot的托管依赖项中。

Embedded Servlet web server threading configuration

用于配置嵌入式Servlet web服务器(Jetty、Tomcat和Undertow)使用的线程的配置属性已经转移到专用线程组。现在可以在server.jetty.threads, server.tomcat.threads, 和server.undertow.threads找到属性。旧属性保留为弃用形式,以简化迁移。

Changes to the Default Error Page’s Content

默认情况下,错误消息和任何绑定错误不再包含在默认错误页面中。这减少了将信息泄露给客户机的风险。server.error.include-message 和server.error.include-binding-errors 可以分别用来控制消息和绑定各自的错误。支持的值是always, on-param和never。

Disk space health indicator

自动配置的磁盘空间运行状况指示器在应用程序启动时不再需要监视的路径存在。一个不存在的路径将被检测到具有零可用空间,从而导致指示灯的响应下降。

Automatic creation of developmentOnly Gradle configuration

仅开发配置,主要用于声明Spring Boot的DevTools依赖时使用,现在由Spring Boot的Gradle插件自动创建。任何手动的开发配置都可以从Gradle构建脚本中删除。

Removal of Maven Site Plugin management

Spring Boot的构建不再使用站点插件(maven-site-plugin),插件管理已经被删除。如果你依赖Spring Boot的托管版本,你应该添加你自己的插件管理。

Removal of Maven Exec Plugin custom configuration

如果您继承spring-boot-start -parent,它将不再配置Maven的exec插件(exec- Maven -plugin)来使用start-class设置主类。如果你依赖它,你可以按照以下方式恢复这种行为:

ApplicationContextRunner disables bean overriding by default

为了与SpringApplication保持一致,ApplicationContextRunner现在默认禁用bean覆盖。如果您需要对测试使用bean覆盖,那么可以使用withAllowBeanDefinitionOverriding 来启用它。

Activating multiple profiles with @ActiveProfiles

现在@ActiveProfiles注解支持包含逗号的配置属性名字。这意味着像@ActiveProfiles("p1,p2")这样的注释将把提供的值p1,p2作为一个单独的配置文件名称。要激活多个配置文件,请像@ActiveProfiles({"p1","p2"})中那样将每个配置文件名称作为一个单独的值提供

WebServerInitializedEvent and ContextRefreshedEvent

作为引入对优雅关闭-graceful shutdown的支持的一部分,web服务器初始化现在在应用程序上下文刷新处理结束时执行,而不是在刷新处理完成后立即执行。因此,WebServerInitializedEvent现在在ContextRefreshedEvent之前发布。

Deprecations from Spring Boot 2.2

在Spring Boot 2.2中弃用的大多数类、方法和属性已经在这个版本中删除了。请确保在升级之前没有调用已弃用的方法。

Configuration properties

许多属性已被重命名或弃用。您可以使用spring-boot-properties-migrator模块来标识这些属性。一旦将其作为依赖项添加到项目中,它不仅会分析应用程序的环境并在启动时打印诊断结果,还会在运行时为您临时迁移属性。

备注:完成迁移后,请确保从项目的依赖项中删除此模块。

New and Noteworthy

Tip 检查 the configuration changelog for 配置更改的完整概述。

Java 14 support

Spring Boot 2.3增加了对Java 14的支持。也支持Java 8和11。

Build OCI images with Cloud Native Buildpacks

Support forbuilding Docker imagesusingCloud Native Buildpacksand has been added to the Maven and Gradle plugins via thespring-boot:build-image goaland thebootBuildImage task. ThePaketoJava buildpack is used by default to create images.

使用Cloud Native Buildpacksbuilding Docker images和已经被Maven和Gradle插件添加通过spring-boot:build-image goalbootBuildImage task 。默认情况下,Paketo Java buildpack 用于创建图像。

Build layered jars for inclusion in a Docker image

MavenGradle插件支持将内容分层构建jar文件。该层根据更改的频率将jar的内容分开。这种分离允许更有效地构建Docker映像。未更改的现有层可以与已更改的层一起重用。

根据您的应用程序,您可能想要优化如何创建层和添加新层。这可以通过配置来实现,该配置描述了如何将jar划分为几个层,以及这些层的顺序。

当您创建分层jar时,spring-boot-jarmode-layertools jar将默认作为依赖项添加到您的jar中(这可以通过构建配置禁用)。有了这个类路径上的jar,您就可以以一种特殊的模式启动应用程序,这种模式允许引导代码运行与您的应用程序完全不同的东西,例如,提取层的东西。要查看可用选项,使用-Djarmode=layertools启动一个fat jar,示例如下:

Predictable Classpath Ordering When Exploding Fat Jars

用Maven和Gradle构建的fat jar现在包含了一个索引文件。当jar被分解时,这个索引文件用于确保类路径的顺序与直接执行jar时相同。

Support of wildcard locations for configuration files

Spring Boot现在在加载配置文件时支持通配符位置。默认情况下,支持jar外部的config/*/通配符位置。当有多个配置属性源时,这在Kubernetes这样的环境中非常有用。例如,如果你有单独的mysql和redis配置,他们可以自动选择,如果你把他们放在/config,即/config/mysql/application.properties 和 /config/redis/application.properties。

Graceful shutdown

所有四个嵌入式web服务器(Jetty、Reactor Netty、Tomcat和Undertow)以及响应式和基于servlet的web应用程序都支持优雅关闭。当使用server启用时使用server.shutdown=graceful,关闭后,web服务器将不再允许新的请求,并等待活动请求完成的宽限期。宽限期可以使用spring.lifecycle.timeout-per-shutdown-phase来配置。详情请参阅参考文档-reference documentation

Liveness and Readiness probes

Spring Boot现在拥有应用程序可用性的内置知识,可以跟踪应用程序是否处于活动状态,以及它是否准备好处理流量。运行状况端点可以启用 management.health.probes.enabled=true 配置属性公开应用程序的活跃度(/actuator/health/liveness)和就绪度(/actuator/health/readiness)。当运行在Kubernetes上时,这是自动完成的。

要了解更多关于这一特性的信息,请查看这篇博文-this blog post及其链接的参考文档。

Spring Data Neumann

Spring Boot 2.3附带了一个主要的Spring Data版本.。请查看Spring Data Neumann goes GA以学习更多。

R2DBC support

当r2dbc在类路径上时,ConnectionFactory以与jdbc数据源类似的方式自动配置。如果Spring Data在类路径上,存储库也会像往常一样自动配置。

R2DBC支持还添加了连接工厂的运行状况指示器、ConnectionPool的指标和测试片@DataR2dbcTest。

Configurable base path for WebFlux applications

现在可以配置WebFlux应用程序的所有web处理程序的基本路径。使用spring.webflux.base-path 属性。

Date-Time conversion in web applications

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

Actuator Improvements

End-to-end Traceability for Configuration Properties

As of#17886, the /actuator/configprops endpoint provides end-to-end information about configuration properties, aligning its behavior with the environment endpoint. For example, after adding server.server-header=Spring Boot in your application.properties, the endpoint will show you the following:

#17886,开始,/actuator/configprops端点提供了关于配置属性的端到端信息,使其行为与环境端点保持一致。例如,在你的应用程序中添加server.server-header=Spring Boot到你的application.properties,端点将显示以下内容:

Names in metrics endpoint are ordered alphabetically

在/actuator/metrics/可以得到的指标名称现在按字母顺序排列,这使得它更容易找到你正在寻找的东西。

Query-less datasource health indicator

在没有验证查询的情况下,数据源HealthIndicator现在使用 java.sql.Connection#isValid 验证连接以query-less模式操作。

Contributing additional tags to Web MVC and WebFlux metrics

除了默认为MVC和WebFlux提供的标签之外,现在还可以贡献标签。对于MVC,可以使用WebMvcTagsContributor @Bean;对于WebFlux,可以使用WebFluxTagsContributor @Bean。

Auto-configuration of Wavefront’s Sender

Wavefront 自动配置已经被更新成定义一个WavefrontSender bean。这允许在单个连接上发布Wavefront度量和跟踪。

Native Kafka metrics

Kafka指标是为自动配置的ConsumerFactory和ProducerFactory创建的消费者和生产者发布的。要为自定义工厂创建的组件生成指标,您应该添加一个监听器,示例如下:


备注:如果你只是为了收集Kafka指标而启用JMX支持,那么就没有必要了。

RSocket support for Spring Integration

Spring Boot现在为Spring Integration的RSocket支持提供自动配置。

如果spring-integration-rsocket可用,开发人员可以使用spring.rsocket.server.*”相关属性配置RSocket服务器,并让它使用IntegrationRSocketEndpoint或RSocketOutboundGateway组件来处理传入的RSocket消息。

Binding to Period

如果一个属性需要表示一段时间,可以使用java.time.Period属性。与Duration支持类似,支持一种简单的格式(即10周10w)以及元数据支持。

Slice test for Web Services

一个新的 @WebServiceClientTest 注解已经被添加支持Web Services的“slice”测试 。

Dependency Upgrades

Spring Boot 2.3 移动到几个Spring项目的新版本:

Spring Data Neumann

Spring HATEOAS 1.1

Spring Integration 5.3

Spring Kafka 2.5

Spring Security 5.3

Spring Session Dragonfruit

请注意Spring Boot 2.3基于与Spring Boot 2.2相同的Spring Framework and Reactor生成构建。

许多第三方依赖关系也得到了更新,其中一些比较值得注意的是:

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

Miscellaneous

除了上面列出的变化,还有很多小的调整和改进,包括:

在我们的JPA支持中更新了缺省配置,以改进测试体验, 查看#16230#16747.

spring-boot-autoconfigure-processor的输出现在是可重复的,这使得它在Gradle的构建缓存中工作得更好。

Couchbase的类型键可以通过spring.data.couchbase.type-key配置。

OAuth2参数绑定现在可以通过@WebMvcTest来实现。

Jetty的后备队列可以使用server.jetty.max-queue-capacity进行配置。

可以使用spring.liquibase.tag来配置Liquibase的标签支持。现在可以通过spring.liquibase.clear-checksums属性来清除当前变更日志中的所有校验和。

Gradle 元数据现在已经发布了。

DataSourceBuilder 可以被用来配置 SimpleDriverDataSource.

DataSource指标有了一个新的描述。

云平台的自动检测可以使用spring.main.cloud-platform来覆盖。

当请求具有主体时,现在支持从执行器的HTTP端点缓存响应。

Maven support for creating a fat jar now honors the project.build.outputTimestamp property, allowing its output to bereproducible.

Maven对创建fat jar的支持现在以 project.build.outputTimestamp属性为荣,使其输出可重复生产-reproducible

Maven插件的Javadoc 现在发布了-now published.

一个定制器接口, RSocketMessageHandlerCustomizer被提供给自定义自动配置RSocketMessageHandler,

一个定制器接口,DefaultCookieSerializerCustomizer,被提供给自定义自动配置 DefaultCookieSerializer.

Auto-configuration of the default servlet can now be disabled by setting server.servlet.register-default-servlet to false.

默认servlet的自动配置现在可以通过设置server.servlet.register-default-servlet=false来禁用。

添加了一个新的条件@ConditionalOnWarDeployment。它可以用于检测何时将应用程序作为war部署到Servlet容器或应用程序服务器。

properties migrator将处理所有弃用的属性,而不仅仅是那些带有错误级别的属性。

JDBC驱动程序在销毁war的ServletContext时被注销。

Redis’s sentinel密码可以被配置使用spring.redis.sentinel.password.

Deprecations in Spring Boot 2.3

 spring.http. 相关属性已经被移动到server.servlet.encoding., spring.mvc. 和spring.codec., 查看#18827.

SpringApplication#refresh(ApplicationContext)已被弃用,替代的是SpringApplication#refresh(ConfigurableApplicationContext).

 server.error.include-stacktrace使用的ON_TRACE_PARAM 属性已经被重命名为ON_PARAM。

org.springframework.boot.autoconfigure.elasticsearch.rest.RestClientBuilderCustomize已经被废弃,替代它的是org.springframework.boot.autoconfigure.elasticsearch.RestClientBuilderCustomizer

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342