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

Spring Boot v2.4

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

注意在2.4以后版本已经取消release后缀

Spring Boot 2.4 Release Notes

Upgrading from Spring Boot 2.3

Versioning scheme change

从2.4开始,Spring Boot采用了the new Spring versioning scheme——这意味着你应该从 2.3.5.RELEASE开始更新build.gradle/pom.xml文件中的Spring Boot版本到2.4.0.

JUnit 5’s Vintage Engine Removed from spring-boot-starter-test

如果您升级到Spring Boot 2.4,并看到诸如org.junit.Test的JUnit类的测试编译错误。这可能是因为JUnit 5的老式引擎已经从spring-boot-starter-test中移除。老式引擎允许用JUnit 4编写的测试由JUnit 5运行。如果您不想将您的测试迁移到JUnit 5,并且希望继续使用JUnit 4,那么添加一个对老式引擎的依赖,如下面的Maven示例所示:

如果你正在使用Gradle,等价的配置如下面的例子所示:

Config File Processing (application properties and YAML files)

Spring Boot 2.4改变了处理application.properties和application.yml 文件的处理方式。如果你只有一个简单的application.properties 或者application.ym文件,你的升级应该是无缝的。但是,如果您有一个更复杂的设置(带有特定于概要文件的属性,或者概要文件激活属性),那么如果您想使用新特性,您可能需要做some changes

如果你只想要Spring Boot 2.3兼容的逻辑,你可以在你的application.properties或者application.yml文件设置一个spring.config.use-legacy-processing属性为true。

Config Data Imports

通过spring.config.location和spring.config.import(在本版本中引入)明确指定配置位置,如果文件或文件夹不存在,将不再静默失败。如果您想导入一个位置,但如果找不到它也不介意跳过它,那么现在应该在它前面加上optional:

例如, spring.config.location=optional:/etc/config/application.properties,如果它存在将从/etc/config/导入application.properties文件 ,并且如果它不存在将跳过。

如果你想把所有的位置都当作optional ,你可以设置spring.config.on-not-found=ignore在SpringApplication.setDefaultProperties(…)或在系统/环境变量设置。

Embedded database detection

嵌入式数据库逻辑经过了改进,只有在内存中才认为数据库是嵌入式的。如果在H2、HSQL和Derby中使用基于文件的持久性或服务器模式,则此更改有两个后果:

(1)sa用户名不再设置。如果您依赖于该行为,则需要设置 spring.datasource.username=sa在您的配置。

(2)这样的数据库将不再在启动时被初始化,因为它们不再被认为是嵌入式的。您可以像往常一样使用pring.datasource.initialization-mode调优它。

Logback Configuration Properties

特定于Logback的Logging properties已被重命名,以反映它们是特定于Logback的事实。以前的名称已被弃用。

下面Spring Boot properties已经被改变:

logging.pattern.rolling-file-name → logging.logback.rollingpolicy.file-name-pattern

logging.file.clean-history-on-start → logging.logback.rollingpolicy.clean-history-on-start

logging.file.max-size → logging.logback.rollingpolicy.max-file-size

logging.file.total-size-cap → logging.logback.rollingpolicy.total-size-cap

logging.file.max-history → logging.logback.rollingpolicy.max-history

以及它们映射到的系统环境属性:

ROLLING_FILE_NAME_PATTERN → LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN

LOG_FILE_CLEAN_HISTORY_ON_START → LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START

LOG_FILE_MAX_SIZE → LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE

LOG_FILE_TOTAL_SIZE_CAP → LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP

LOG_FILE_MAX_HISTORY → LOGBACK_ROLLINGPOLICY_MAX_HISTORY

Default Servlet Registration

Spring Boot 2.4将不再注册servlet容器提供的DefaultServlet。在大多数应用程序中,它不被使用,因为Spring MVC的DispatcherServlet是唯一需要的servlet。

如果您发现仍然需要默认的servlet,你可以设置server.servlet.register-default-servlet=true。

HTTP traces no longer include cookie headers by default

默认情况下,Cookie请求头和Set-Cookie响应头不再包含在HTTP traces 。为了恢复Spring Boot 2.3的行为,设置management.trace.http.include进cookies, errors, request-headers, response-headers

Undertow Path on Forward

默认情况下,当请求被转发时,Undertow保留原始的请求URL。这个版本覆盖了Undertow默认值以符合Servlet规范。之前的Undertow默认行为可以通过设置属性server.undertow.preserve-path-on-forward=true来回复。

Neo4j

这个版本对Neo4j的支持进行了重大的调整。在spring.data.neo4j.*中有许多属性已经移除,同时也移除了对Neo4j OGM的支持。

Neo4j驱动程序的配置是通过spring.neo4j.*命名空间完成的。尽管URI和基本身份验证仍然以一种弃用的方式支持。

想要了解更多关于这一变化以及Spring Data Neo4j 6带来了什么,check the documentation.

Elasticsearch RestClient

低级Elasticsearch RestClient bean将不再由Spring Boot自动配置。RestHighLevelClient bean仍然是自动配置的。

大多数用户不需要使用低级客户端,也不应该受到此更改的影响。

R2DBC

R2DBC的核心基础设施已经转移到Spring框架,并提供了一个新的 spring-r2dbc 模块。如果您正在使用这个基础设施,请确保将已弃用的访问迁移到新的核心支持。

Flyway

Flyway 7的升级包括了回调顺序的some changes。这将是一个突破性的变化,任何人依赖注册订单,我们支持通过@Order和Ordered。

如果您正在使用Flyway 5,请确保在升级到Spring Boot 2.4之前升级到Flyway 6,因为Flyway只为一个特性版本保留模式升级。

Removal of Plugin Management for Flatten Maven Plugin

Spring Boot的构建不再使用Flatten Maven插件(flatten-maven-plugin),它的插件管理也被删除了。如果你依赖Spring Boot的托管版本,你应该添加你自己的插件管理。

Version management for exec-maven-plugin

exec-maven-plugin的版本管理已经被删除。如果您正在使用这个插件,请确保在您自己的pluginManagement中指定一个版本。

Spring Boot Gradle Plugin

用于Spring Boot Gradle Plugin bootJar任务的DSL已经更新,以便可以使用属性<String>来配置主类。如果你目前使用的是maininclassname,例如:


你应该改变它在 mainClass:

Metrics export in integration tests

@SpringBootTest不再配置可用的监控系统,只提供内存中的MeterRegistry。如果您将度量作为集成测试的一部分导出,那么您可以将@AutoConfigureMetrics添加到您的测试中,以恢复以前的行为。

Deprecations from Spring Boot 2.2 and 2.3

在Spring Boot 2.2中弃用的代码在Spring Boot 2.4中删除了,这反映了Spring Boot发行版的兼容性策略-release compatibility policy。在Spring Boot 2.3中弃用的代码仍然保留,并计划在Spring Boot 2.5中删除。

New and Noteworthy

Tip Check the configuration changelog for a complete overview of the changes in configuration.

Spring Framework 5.3

Spring Boot 2.4使用Spring Framework 5.3。Spring Framework wiki中有一个what’s new section部分详细介绍了这个新版本。

Spring Data 2020.0

Spring Boot 2.4包含了Spring Data发布系列的2020.0版本(代码名为Ockham)。有关发布细节,请参阅Spring Data wiki

Neo4j

这个版本带来了对反应性存储库的支持,并依赖于一个单独的Neo4j驱动程序的自动配置。因此,现在可以在有或没有Spring Data.的情况下使用Neo4j。

Neo4j的健康检查使用驱动程序,只要配置了Neo4j驱动程序,就可以进行健康检查。

如果您希望将@Transactional与响应式访问一起使用,您现在需要自己配置Neo4jReactiveTransactionManager bean。

R2DBC

R2dbcEntityTemplate可以通过实体简化响应式R2DBC的使用

Java 15 Support

Spring Boot 2.4现在完全支持Java 15(并针对Java 15进行了测试)。最低支持版本仍然是Java 8。

Custom property name support

使用构造函数绑定时,属性的名称派生自参数名称。如果您想使用java 保留关键字,这可能会成为一个问题。对于这种情况,现在可以使用@Name注释,类似于:

上面的示例展示了一个 sample.import property。

Layered jar enabled by default

这个版本启用分层jar,并默认包含layertools。这应该可以使用开箱即用的构建包提高生成映像的效率,并让您受益于该特性当crafting custom Dockerfile

Importing Additional Application Config

只要您没有设置spring.config.use-legacy-processing = true。您现在可以直接从主应用程序导入额外的属性和application.properties或者application.yml.

您可以使用spring.config.import 属性来指定一个或多个应该导入到Spring环境中的附加配置文件。更多细节请参见参考指南的这一部分-this section

我们已经出版a short blog解释我们为什么要做出这些改变。

Volume Mounted Config Directory Trees

spring.config.import属性还可以用于导入Kubernetes常用的配置树。配置树是提供key/value的另一种方法。每一对都在自己的文件中声明,文件名构成属性键,文件内容提供值。

有关完整的示例,请参见updated reference documentation.

默认情况下,从配置树加载的属性的末尾会修剪换行符。

Importing Config Files That Have no File Extension

一些云平台只允许您在没有文件扩展名的情况下卷挂载文件。如果有这样的约束,现在就可以通过向Spring Boot提供关于内容类型的提示来导入这些文件。例如,spring.config.import=/etc/myconfig[.yaml]将/etc/myconfig加载为YAML.。

Origin Chains

使用新的getParent()方法更新了Origin接口。这允许我们提供一个完整的来源链,可以准确地显示一个项目的来源。

例如,您可以使用spring.config.import在你的application.properties来导入第二个文件。从第二个文件加载的属性的起源将有一个指向原始导入声明的父元素。

您可以通过查看actuator/env或actuator/configprops执行器端点的输出来自己尝试一下。

Startup Endpoint

现在可以使用新的启动执行器端点,它显示有关应用程序启动的信息。端点可以帮助您识别比预期开始时间长的bean。

这项工作建立在Spring framework 5.3最近添加的应用程序启动跟踪特性的基础上。你可以阅读更多关于这个特性的信息in the Spring Framework reference documentation.

新的执行器API在documented here.

Docker/Buildpack Support

Publishing Images

Maven插件spring-boot:build-image goal和Gradle插件bootBuildImage任务现在有能力将生成的映像发布到Docker注册表中。有关配置用于发布图像的插件的更多细节,请参阅MavenGradle插件文档。

Authentication

当使用Spring Boot的buildpack支持时,您现在可以为您的构建器或run image使用一个私有的经过身份验证的Docker注册表。同时支持用户名/密码和基于令牌的身份验证。

MavenGradle文档已经更新,以显示新的配置。

Paketo Buildpack Defaults

默认情况下,Maven插件spring-boot:build-image goal和Gradle插件bootBuildImage任务使用的映像构建器已经升级到最新的Paketo映像。Paketo图像注册表已从 Google Container Registry 更改为Docker Hub,以提高可访问性。

Maven Buildpack Support

spring-boot:build-image Maven goal 现在将所有项目模块依赖关系放在“application”层。这意味着,如果您的构建中有多个项目模块,它们现在将全部结束在同一层。

XML模式也被更新,以允许使用新的<includeModuleDependencies/>和<excludeModuleDependencies/>元素定制该层。

updated Maven documentation查看细节。

Gradle Buildpack Support

bootBuildImage Gradle任务现在将所有项目模块的依赖关系放在“application”层。这意味着,如果您的构建中有多个项目模块,它们现在将全部结束在同一层。

在自定义层时,还可以在DSL中使用includeProjectDependencies()和excludeProjectDependencies()。

See theupdated Gradle documentationfor details.

Redis Cache Metrics

如果你正在使用Redis缓存,你现在可以通过Micrometer公开缓存统计信息。记录的度量包括数量放置、获取和删除,以及点击/错过。挂起的请求数和锁等待时间也会被记录。

要启用该特性,设置spring.cache.redis.enable-statistics=true

Web Configuration Properties

添加了一些属性来支持配置Spring MVC或Spring WebFlux的web区域设置和资源位置。新的属性是:

spring.web.locale

spring.web.locale-resolver

spring.web.resources.*

添加了一个新的属性来支持使用servlet或响应式web堆栈配置执行器管理端点:

management.server.base-path

这些特定于Spring MVC和servlet的属性已经被弃用,取而代之的是支持web堆栈的新属性:

spring.mvc.locale

spring.mvc.locale-resolver

spring.resources.*

management.server.servlet.context-path

Register @WebListeners in a way that allows them to register servlets and filters

Servlet @WebListener类现在以这样一种方式注册,它们可以自己注册Servlet和过滤器。

早期版本的Spring Boot通过调用javax.servlet.Registration.Dynamic来注册它们。这意味着应用了Servlet规范(4.4)的以下部分:

如果ServletContext传递给ServletContextListener contextInitialized方法ServletContextListener既不是web.xml 中声明或web-fragment.xml l和注释@WebListener然后抛出UnsupportedOperationException必须方式对ServletContext中定义的所有方法编程配置servlet、filters和listeners。

从Spring Boot 2.4开始,我们不再使用动态注册,所以可以安全地从ServletContextListener调用event.getServletContext(). addservlet(…)和event.getServletContext. addfilter(…)的contextInitialized方法。

Slice Test for Cassandra

使用@DataCassandraTest可以使用额外的测试片来测试依赖Cassandra的组件。通常,默认情况下只配置Cassandra存储库和所需的基础设施。

下面是一个使用Testcontainers和@DynamicPropertSource的例子:

Flyway 7

这个版本升级了Flyway 7,带来了一些额外的属性。对于开源版本,我们已经添加了以下 spring.flyway属性:

url

user

password

If you’re using the "teams" edition you can also make use of:

cherry-pick

jdbc-properties

oracle-kerberos-cache-file

oracle-kerberos-config-file

skip-executing-migrations

Configuration property for H2 Console’s web admin password

一个新的配置属性spring.h2.console.settings.web-admin-password,用于配置H2控制台的web管理员密码。密码控制对控制台的首选项和工具的访问。

CqlSession-Based Health Indicators for Apache Cassandra

引入了新的基于CqlSession的健康指示器CassandraDriverHealthIndicator和CassandraDriverReactiveHealthIndicator。当Cassandra的Java驱动程序在类路径上时,其中一个指示器将自动配置。现有的基于Spring Data cassandra的健康指示器已经弃用。

Filtered Scraping with Prometheus

执行器的Prometheus端点,/执行器/prometheus现在支持一个includedNames查询参数,该参数可用于过滤响应中包含的样本。有关更多细节,请参阅执行器API文档-Actuator API documentation

Spring Security SAML Configuration Properties

添加了一些属性,以允许配置SAML2依赖方注册的解密凭据和断言消费者服务(ACS)。这些属性分为以下几类:

spring.security.saml2.relyingparty.registration.decryption.*

spring.security.saml2.relyingparty.registration.acs.*

Failure Analyzers

即使没有创建ApplicationContext,FailureAnalizers (故障分析器)也将被考虑。这也允许他们分析环境处理过程中抛出的任何异常。

注意,除非创建了ApplicationContext,否则不会使用任何实现BeanFactoryAware或EnvironmentAware的分析器。

Jar Optimizations

当生成可运行的Spring Boot jar时,空的启动器依赖项将被自动删除。由于大多数启动器只提供可传递的依赖项,所以将它们打包到最终jar中没有什么意义。

Spring Boot注释处理器也被删除了,而且它们只在构建过程中有用。它们是spring-boot- autoconfiguration -processor和spring-boot-configuration-processor。

如果您有自己的不包含代码的starter POMs,您可以将Spring-Boot-Jar-Type的条目添加到它的MANIFEST.MF中,值为"dependencies-starter"。如果您想过滤掉一个注释处理器,您可以添加值为“annotation-processor”的相同属性。

Miscellaneous

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

应用程序运行的JVM版本现在在启动时被记录。

尾随空格会自动从logging.config的值中删除。

R2DBC 池支持公开额外的配置属性。

可以将LdapTemplate中的异常处理配置为忽略某些异常。

ISO 偏移日期时间格式支持MVC和Webflux。

为新的PathPatternParser添加一个配置属性,以代替AntPathMatcher来解析和匹配请求映射路径模式。

@DurationUnit, @DataSizeUnit, and @PeriodUnit 可以使用@ConstructorBinding注释构造函数参数。

自动配置的RabbitConnectionFactory检查CredentialsProvider和CredentialsRefreshService是否存在。

健康组只能用排除项定义。

使用management.health.db.ignore-routing-data-sources可以在健康检查中忽略AbstractRoutingDataSource。

可以配置SAML依赖方的localEntityIdTemplate。

HTTP traces是纳秒精度的测量。

当一个Liquibase变更日志丢失时,一个专用的FailureAnalyzer会提供一个有意义的消息。

Netty的请求解码器可以自定义使用server.netty.*属性。

Liquibase Maven插件插件管理这与Spring Boot版本管理的Liquibase版本一致。

对Prometheus PushGateway的基本身份验证支持。

使用spring.redis.client-type允许在Jedis和Lettuce都可用的情况下选择Jedis。

使用spring.redis.lettuce.cluster.refresh.dynamic-sources来刷新Redis Cluster动态源。

参考文档现在包含了所有配置示例的Properties和YAML。

RSocketServer的片段大小现在可以使用spring.rsocket.fragment-size属性来定制。

现在可以使用属性logging.charset.console和logging.charset.file来配置Logback和Log4j日志记录使用的字符集。

使用Gradle 6.7或更高版本构建Spring Boot应用程序时,将支持Gradle的配置缓存-configuration cache

Dependency Upgrades

Spring Boot 2.4 moves to new versions of several Spring projects:

Spring AMQP 2.3 (what’s new)

Spring Batch 4.3 (what’s new)

Spring Data 2020.0 (changelog)

Spring Framework 5.3 (what’s new|upgrading)

Spring Integration 5.4 (what’s new)

Spring HATEOAS 1.2 (migration guide)

Spring Kafka 2.6 (what’s new)

Spring Retry 1.3

Spring Security 5.4 (what’s new)

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 (release notes)

Micrometer 1.6 (release notes)

Mockito 3.4

MongoDB 4.1

Oracle Database 19.7

Reactor 2020.0 (release notes)

RSocket 1.1

Undertow 2.2

Deprecations in Spring Boot 2.4

ConfigFileApplicationListener已弃用,取而代之的是ConfigDataEnvironmentPostProcessor。

与contextClass相关的SpringApplicationBuilder和SpringApplication方法已经被弃用,取而代之的是使用contextFactory。

CloudFoundryVcapEnvironmentPostProcessor 的一些方法已被弃用,以处理EnvironmentPostProcessor更新(这些应该会影响大多数用户)。

BuildLog构建包支持类已经弃用了一些方法,并用提供更多细节的替代方法替换了它们。

LoggingSystemProperties 中的Logback常量已被弃用,取而代之的是LogbackLoggingSystemProperties。

UndertowServletWebServerFactory中的isEagerInitFilters/setEagerInitFilters方法已被isEagerFilterInit/setEagerFilterInit替换。

为了支持BootstrapContext, ApplicationEnvironmentPreparedEvent、ApplicationStartingEvent和SpringApplicationRunListener中的一些方法已经被弃用。

用于支持buildpack的BuildLog已经更新,以支持更多数据(大多数用户不会直接使用这个类)。

一些特定于Spring MVC和servlet的属性已经弃用(请参阅上面的Web配置属性一节)。

使用Spring Data Cassandra的运行状况指示器已经被弃用,取而代之的是那些使用原始驱动程序的指示器。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容