Spring Boot 2.2版本变化[翻译]

大家好,我是烤鸭:

​ 最近在把低版本的springboot项目升级,正好翻译了下springboot 2.1-2.3 版本的更新日志。

​ Github 原文:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.2-Release-Notes

​ 2.1 版本变化:https://blog.csdn.net/Angry_Mills/article/details/113113486

​ 2.3 版本变化:https://blog.csdn.net/Angry_Mills/article/details/113116195

推荐版本: 2.2.12.RELEASE

从Spring Boot 2.1升级

Spring Framework 5.2

此版本升级到Spring Framework 5.2。请参阅Spring Framework的升级文档以获取更多详细信息。

现在默认情况下禁用JMX

#16090开始,默认情况下不再启用JMX。可以使用configuration属性启用此功能spring.jmx.enabled=true。如果您正在使用IDE功能来管理应用程序,则可能还要在该位置启用该标志。

默认情况下,在Maven插件中启用了Fork

现在默认情况下会分支由Maven插件运行的Spring Boot应用程序。如果您使用来定制属性-D,这些属性将不再传递给Spring Boot应用程序。可以使用-Dspring-boot.run.jvmArguments并指定专用选项来指定此类属性,例如用于启用配置文件。有关更多详细信息,请参考参考文档

Jakarta EE依赖项

在可能的情况下,我们已经从Spring Boot的启动程序中从具有组ID的Java EE依赖关系转移到具有组ID的等效Jakarta EE依赖关系。除了现有的Java EE API依赖关系依赖管理之外,还添加了对Jakarta EE API依赖关系的依赖管理。将来将删除Java EE API依赖关系的依赖关系管理,并鼓励所有用户转移到Jakarta EE API依赖关系。javax.jakarta.

作为从Java EE到Jakarta EE迁移的一部分,两个依赖项在其最新维护版本中更改了工件ID。 com.sun.mail:javax.mail现在com.sun.mail:jakarta.mailorg.glassfish:javax.el现在org.glassfish:jakarta.el。如果您不太可能直接使用这些依赖关系,请更新您的依赖关系pom.xmlbuild.gradle相应地进行更新。

JUnit 5

spring-boot-starter-test现在默认提供JUnit 5。默认情况下,包括JUnit 5的老式引擎以支持现有的基于JUnit 4的测试类,以便您可以在准备好迁移到JUnit 5时进行迁移。也可以在同一模块中混合使用基于JUnit 4和基于JUnit 5的测试类。这使您可以根据需要逐步迁移到JUnit 5。

请注意,用于JUnit 4的Maven Surefire插件不支持该listener属性。如果您具有类似于以下内容的Maven配置:

<configuration>
    <properties>
        <property>
            <name>listener</name>
            <value>com.example.CustomRunListener</value>
        </property>
    </properties>
</configuration>

不能使用junit-vintage-engine,而需要显式回滚到JUnit 4:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-junit-jupiter</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

AssertJ 3.12

此版本升级到AssertJ 3.12,其中包含与相关的断言的API的重大更改Iterator。有关详细信息,请参见AssertJ发行说明

集成测试中不再考虑Devtools配置

集成测试中不再考虑主目录中指定的Devtools配置。

Spring HATEOAS 1.0

此版本升级到Spring HATEOAS 1.0,其中包含一些重大的API更改。有关详细信息和可用于简化迁移的脚本,请参见宣布M1版本博客文章

迁移用于logging.file size-based的属性

logging.file.max-size并且logging.file.total-size-cap现在正在使用标准DataSize类型替换专有FileSize类型。如果您使用这些属性中的任何一个,请确保与标准格式对齐

数据源运行状况

DataSource健康指标包含一个额外的validationQuery与反对使用的验证查询属性DataSource。此外,该hello属性以前提供的查询结果已重命名为result

Elasticsearch

此版本升级到Elasticsearch 6.7,其中包含一些重大的API更改。请参阅6.56.66.7的细节重大更改网页。

不推荐使用Elasticsearch transport和Jest客户端,而希望使用其他选项RestHighLevelClient有关Elasticsearch支持参考文档已更新。

Hibernate 方言

现在,Spring Boot允许Hibernate选择要使用的方言,而不是根据检测到的数据库应用默认方言。如果您对此功能感兴趣,请确保您未明确指定数据库平台(即通过spring.jpa.databasespring.jpa.database-platform)。

如果您以前配置了方言,则可能要删除自定义项。

执行器HTTP跟踪和审核默认情况下处于禁用状态

由于默认存储库实现是在内存中并且可能消耗太多资源并且不支持群集,因此默认情况下不再启用Actuator HTTP跟踪和审核功能。对于健壮的生产级HTTP跟踪,我们建议使用Spring Cloud Sleuth或类似。

要启用HTTP跟踪,请贡献一个bean实现HttpTraceRepositoryAuditEventRepository重新启用这些功能。配置属性可用于关闭这些功能,即使在这些bean存在的情况下也是如此(请参阅management.auditevents.enabledmanagement.trace.http.enabled

Gradle 要求

Gradle的最低要求已更改Spring Boot现在需要Gradle 4.10+。请相应升级。

Jetty 日志记录配置

server.jetty.accesslog.* 与日志格式相关的配置属性不再可用(与日志文件相关的配置属性仍然存在)。

如果您的应用程序正在使用这些属性,那么将引入两个新的键,format并且custom-format; format允许您在现有格式中进行选择,custom-format允许您使用自己的格式:

server.jetty.accesslog.format=NCSA # 预定义格式的枚举: NCSA, EXTENDED_NCSA
server.jetty.accesslog.custom-format= # String, 自定义格式会覆盖已经定义的模板

现在,不支持的选项转换为定义自定义日志格式,并使用Jetty的CustomRequestLog中定义的选项。

Hamcrest 2.1

此版本升级到Hamcrest 2.1。对于大多数用户来说,这应该是一个替代品。如果您直接依赖org.hamcrest:hamcrest-coreorg.hamcrest:hamcrest-library,请改用新的组合模块org.hamcrest:hamcrest。如果您依靠Hamcrest,则spring-boot-starter-test无需采取任何措施。

Freemarker模板配置

此版本更改了Freemarker模板的默认模板文件扩展名。这可以使Spring Boot与Web应用程序的安全配置默认值保持一致。升级时,请将现有模板从重命名*.ftl*.ftlh

Tomcat的MBean注册表

现在默认情况下禁用Tomcat的MBean注册表,节省大约2MB的堆。例如,如果要使用Tomcat的MBean,以便它们可以通过Micrometer公开指标,请将设置server.tomcat.mbeanregistry.enabledtrue

记录最大历史记录

<rollingPolicy>默认的logback配置已更新为使用<maxHistory>(7天)。可以使用logging.file.max-history配置属性对其进行调整。

HttpHiddenMethodFilter 默认禁用

_method现在默认情况下将禁用处理请求参数的过滤器,因为如果请求正文可能包含参数,则会导致请求正文的早期消耗。这可以通过设置或者被恢复spring.webflux.hiddenmethod.filter.enabledspring.mvc.hiddenmethod.filter.enabledtrue

健康指标

为了实现新的健康指标组功能,不推荐使用许多类。如果您HealthIndicator通过来配置自定义CompositeHealthIndicatorConfiguration,则需要对其进行更新以使用CompositeHealthContributorConfiguration

Micrometer “ New Relic” 事件类型

Micrometer 1.3已将随每个指标发布的eventType更改为固定值。这与New Relic最佳做法保持一致。

Spring Boot 2.2将使用 management.metrics.export.newrelic.event-type作为eventType并为上下文添加“ metricName”和“ metricType”属性。如果您未明确设置事件类型属性,则SpringBootSample使用该属性。

如果您更喜欢使用仪表名称作为的先前行为,则eventType可以将 management.metrics.export.newrelic.meter-name-event-type-enabled属性设置为true

Health Endpoint JSON

/actuator/health端点已经通过重命名改变所得JSON格式detailscomponents用于第一级元素。这有助于区分由a返回的实际详细信息HealthIndicator和构成综合运行状况的组件指标。

作为更改的结果,执行器介质类型已从application/vnd.spring-boot.actuator.v2+json更改为application/vnd.spring-boot.actuator.v3+json。如果您有需要使用旧格式的工具,则可以使用Accept:V2媒体类型为HTTP标头application/vnd.spring-boot.actuator.v2+json

DevTools配置目录

现在,全局DevTools设置的首选位置是~/.config/spring-boot。可以使用以下任何文件:

  • spring-boot-devtools.properties
  • spring-boot-devtools.yaml
  • spring-boot-devtools.yml

请参阅参考文档的相关部分以获取更多详细信息。

InMemoryUserDetailsManager

为了防止生成和记录资源服务器应用程序的默认密码,InMemoryUserDetailsManager不会生成JwtDecoder或多个OpaqueTokenIntrospector。如果您希望自定义安全配置以使其需要,则需要InMemoryUserDetailsManager自己创建Bean。

样本项目已重命名并重新放置

示例项目已重命名为冒烟测试,以更好地反映其预期目的。它们也已重新放置在源存储库中,现在可以在此处找到。

Java 13支持

Spring Boot 2.2增加了对Java 13的支持。还支持Java 8和11。

性能提升

通过使用proxyBeanMethods=falseSpring Boot的@Configuration类,减少了启动时间和内存使用量。 proxyBeanMethods@ConfigurationSpring Framework 5.2 M1中引入的新属性。 proxyBeanMethods也可作为一个属性@SpringBootApplication@SpringBootConfiguration

在使用bootRunGradle或spring-boot:runMaven在开发时启动应用程序时,JVM将配置有标志(-Xverify:none-XX:TieredStopAtLevel=1)以对其进行优化以减少启动时间。在JDK 13上运行时,-Xverify:none未指定,因为已弃用。

此版本中还进行了其他一些性能改进:

  • 绑定大量配置属性所需的时间已大大减少
  • 当Spring BootPersistenceUnit通过扫描JPA实体完全准备一个时,由于它是冗余的,因此Hibernate自己的实体扫描已被禁用
  • 自动配置中的注入点已经过改进,仅适用于必须创建bean的情况
  • 现在仅在启用和公开端点的情况下(通过JMX或HTTP)创建与Actuator端点相关的Bean。
  • 编解码器自动配置的条件已得到改善,以便在不再使用编解码器时不再对其进行配置
  • Tomcat的MBean注册表默认情况下处于禁用状态,从而将Tomcat的内存占用量减少了约2MB

延迟初始化

现在可以通过该spring.main.lazy-initialization属性启用全局延迟初始化以减少启动时间。请注意,使用该功能需要付费:

  • 在进行任何延迟的初始化时,HTTP请求的处理可能需要更长的时间
  • 启动时发生的故障不会后续不会再发生

单个bean可以通过使用注释其定义来选择退出延迟初始化@Lazy(false)。如果无法@Lazy(false)选择退出延迟初始化,LazyInitializationExcludeFilter则可以使用Bean代替。例如,永远不要将IntegrationFlowbean设置为惰性,可以使用以下代码:

@Bean
static LazyInitializationExcludeFilter integrationLazyInitExcludeFilter() {
    return LazyInitializationExcludeFilter.forBeanTypes(IntegrationFlow.class);
}

Spring Data Moore

Spring Boot 2.2随Spring Data Moore一起提供。请参阅Spring Data Moore博客中的新增功能以了解更多信息。

任务执行和计划的关机配置

自动配置TaskExecutorTaskScheduler现在均可配置的关机行为,请参见spring.task.execution.shutdownspring.task.scheduling.shutdown名称空间以获取更多详细信息。

Kubernetes检测

ConditionalOnCloudPlatform 现在可以检测应用程序是否在Kubernetes上运行。

集成测试中的测试应用程序参数

SpringBootTest允许指定将触发创建ApplicationArgumentsBean的应用程序参数。

@ConfigurationProperties 扫描

@ConfigurationProperties现在可以通过类路径扫描找到带注释的类,以替代使用@EnableConfigurationProperties@Component。添加@ConfigurationPropertiesScan到您的应用程序以启用扫描。

注意 在Spring Boot 2.2.0中默认启用了配置属性扫描,但是从Spring Boot 2.2.1开始,您必须使用进行选择@ConfigurationPropertiesScan

不可更改的@ConfigurationProperties绑定

配置属性现在支持基于构造函数的绑定,该绑定允许带@ConfigurationProperties注释的类不可更改。可以通过使用注释一个@ConfigurationProperties类或其构造函数之一来启用基于构造函数的绑定@ConstructorBinding。现在可以在配置属性绑定提供的构造函数参数上使用诸如@DefaultValue和的注释@DateTimeFormat。请参阅参考文档的相关部分以获取更多详细信息。

RSocket支持

此发行版中添加了新的Spring Boot启动器spring-boot-starter-rsocket。该入门程序为构建使用RSocket支持的应用程序带来了必需的依赖关系。RSocket策略是自动配置的,以提供使用CBOR和JSON编码和解码RSocket有效负载所需的基础结构。一种RSocketRequester.Builder是自动配置为允许您创建一个RSocketRequester将请求发送到远程方法RSocket服务。有关更多信息,请参阅参考文档的相关部分

现在,当Spring Security的spring-security-rsocket模块位于类路径上时,就可以对其进行自动配置。自动配置将启用RSocket安全性,并使用Spring Security的拦截器配置服务器RSocket工厂。

测试RSocket服务器应用程序时,该local.rsocket.server.port属性设置为RSocket服务器正在侦听的端口。可以使用将其注入测试类@LocalRSocketServerPort

ApplicationContextRunner简单的bean注册

ApplicationContextRunner测试实用程序允许内联注册Bean,请参阅 withBean有关详细信息。

RestTemplateBuilder 自定义 request

已添加方法,RestTemplateBuilder以将默认标头添加到所有请求并启用常规请求自定义。

响应式Elasticsearch自动配置

已为Spring Data Moore中引入的反应性Elasticsearch组件添加了自动配置。AReactiveElasticSearchTemplate是使用spring.data.elasticsearch.client.reactive.*属性自动配置的。还提供了对反应式Elasticsearch存储库的自动配置支持。

对线程转储端点的纯文本支持

现在,threaddump执行器端点可以返回与Thread Dump Analyzerhttps://fastthread.io都兼容的纯文本线程转储

Configurable converters for Actuator endpoint input parameters

执行器的输入参数@Endpoint可以使用定制@EndpointConverter注释的转换器进行管理。

Redis缓存配置的回调

RedisCacheManager最近对配置进行了改进,RedisCacheManagerBuilderCustomizerbean使您可以在使用该生成器配置不可变对象之前获取该生成器的句柄RedisCacheManager

Qualifier for Spring Batch datasource

在具有多个数据源的环境中,DataSource可以使用Bean@BatchDataSource来表明它是Spring Batch使用的那个。

构建信息可重复输出

构建信息目标具有一个额外的time属性,该属性允许配置build.time处理方式。可以完全禁用它,也可以重复将其设置为固定时间以使输出build.properties

Hazelcast的健康指标

HealthIndicator 支持Hazelcast。

空闲JDBC连接指标

现在可以通过跟踪sizeidle指标来跟踪连接池的总大小。如果您有自定义DataSourcePoolMetadata实现,请考虑实现该getIdle方法。

健康指标组

现在可以将健康指标分组。如果将应用程序部署到Kubernetes,这是一个典型示例,您可能需要一组不同的运行状况指示器来进行“活动”和“就绪”探测。

可以通过配置属性来配置组。以下创建custom仅包含DataSource指标的组:

management.endpoint.health.group.custom.include = db

custom可以通过点击来调用该组localhost:8080/actuator/health/custom。有关更多详细信息,请查看更新的参考文档

Health Endpoint 组件详细信息

/actuator/health现在返回的组件详细信息现在可以配置为独立于详细信息显示。该management.endpoint.health.show-components 属性方式类似 show-details,可以设置为neverwhen-authorizedalways

例如,如果您想始终显示构成系统运行状况的各个运行状况指示器,但又不想显示其详细信息,则可以使用:

management.endpoint.health.show-components=alwaysmanagement.endpoint.health.show-details=never

也可以在运行状况指示器组上设置相同的属性。

Flyway JavaMigrations的自动配置

Flyway将被自动配置为使用JavaMigration在应用程序上下文中找到的任何bean。

清除Actuator Endpoints的URI中的属性

configpropsenv端点执行的清理操作已得到改进,以包括URI属性。现在将清除URI用户信息中找到的所有密码。

标语

ASCII标语文件现在可以使用来使用ANSI 256颜色转义代码{AnsiColor.NNN}(其中NNN是颜色代码)。您还可以通过将spring.banner.image.bitdepth属性设置为来将它们与图像横幅一起使用8。我们还添加了一个spring.banner.image.pixelmode属性,您可以将其设置block为使用ASCII块字符。

SAML自动配置

当Spring Security的spring-security-saml2-service-provider模块在类路径上时,可以使用Spring Security的SAML 2.0依赖方的自动配置。依赖方可以使用spring.security.saml2.relyingparty.registration.*属性进行注册。

依赖升级

Spring Boot 2.2移至几个Spring项目的新版本:

  • Reactor Dysprosium
  • Spring AMQP 2.2
  • Spring Batch 4.2
  • Spring Data Moore
  • Spring Framework 5.2
  • Spring HATEOAS 1.0
  • Spring Integration 5.2
  • Spring Kafka 2.3
  • Spring Security 5.2
  • Spring Session Corn

许多第三方依赖项也已更新,其中一些更值得注意的是:

  • Artemis 2.9
  • Elasticsearch 6.7
  • Flyway 6.0
  • Git Commit ID Plugin 3.0
  • Hazelcast 3.12
  • HSQLDB 2.5
  • Jackson 2.10
  • Jedis 3.1
  • Jersey 2.29
  • Kafka 2.3
  • Lettuce 5.2
  • Micrometer 1.3
  • Mockito 3.1
  • Solr 8.0

其他改进

除了上面列出的更改之外,还进行了许多小的调整和改进,包括:

  • loadOnStartup可以将包装后的Servlet为执行器端点。
  • Flyway引导程序故障由专门的类 FailureAnalyzer覆盖
  • MessageConverter 支持 kafka的批量监听
  • 添加对Jaybird 4(jdbc:firebird前缀)的支持。
  • 添加对Neo4j-OGM 本地类型的选择支持。
  • 客户端HTTP指标具有outcome标签。
  • 第三方依赖项的众多升级。
  • 现在可以使用以下命令配置Prometheus推送网关 https。
  • PrinterParserbean会自动在应用程序转换服务中注册。
  • 使用H2控制台自动配置时,为了便于连接,现在在启动时记录JDBC连接URL。
  • 现在通过spring.couchbase.username和支持基于Couchbase角色的访问spring.couchbase.password
  • 添加了对OAuth2资源服务器不透明令牌身份验证的支持,可以使用spring.security.oauth2.resourceserver.opaquetoken配置属性对其进行配置。
  • 如果spring.config.location指定额外扩展,但是没有 PropertySourceLoader,则应用程序将快速失败。
  • 可以使用spring-boot.repackage.layout属性在Maven的命令行上设置用于重新打包应用程序的布局。
  • RestTemplateBuilder#defaultHeader 接受多个值。
  • 自定义资源处理程序可以提供favicon
  • Kafka的RecordInterceptor被检测并关联到自动配置的侦听器容器。
  • YAML配置现在可以使用onoff用于布尔类型。
  • 现在,/在使用单独的管理端口时,可以打开执行器发现页面。
  • @WebMvcTest现在扫描HandlerInterceptorBean
  • @WebFluxTest扫描WebFilterBean
  • JMS侦听器容器的接收的可配置超时。
  • 支持Spring Session的刷新模式。
  • 对Spring AMQP的支持confirm-type
  • 用于配置Jetty的线程池的应用程序属性。
  • 将@AutoConfigureMockMvc与JUnit 5一起使用时,支持并行测试执行。
  • 现在,“Fat Jars”中支持Zip64文件。
  • ROLLING_FILE_LOG_PATTERN现在中暴露的logback配置使用。
  • 现在,您可以WebTestClient在任何中注入和使用自定义@SpringBootTest
  • 添加了对Oracle JDBC驱动程序的依赖性管理。
  • 添加了对Awaitility的依赖性管理。

Spring Boot 2.2中的弃用

  • logging.file属性已重命名为logging.file.name
  • logging.path属性已重命名为logging.file.path
  • server.connection-timeout不建议使用该属性,而应使用服务器特定的属性,因为它们的行为并不完全相同。
  • server.use-forward-headers不推荐使用 server.forward-headers-strategy; 以前server.use-forward-headers=true会使用Web服务器的本机支持。现在,您可以使用实现相同的目标server.forward-headers-strategy=native。由于每个服务器都有特定的行为,因此我们现在提供一种替代方法,该替代方法依赖于Spring的ForwardedHeaderFilterserver.forward-headers-strategy=framework。开发人员应使用最适合其用例的选项。
  • ReactiveWebServerApplicationContext#getWebServerFactory
  • agentMaven插件的属性已重命名为agents
  • 不推荐使用Joda的时间,替代为java.time
  • ApplicationHealthIndicatorPing支持HealthIndicator
  • ConfigurationBeanFactoryMetadata支持ConfigurationPropertiesBean
  • ConfigurationPropertiesBindingPostProcessor支持@EnableConfigurationPropertiesregister方法的构造函数。
  • ConfigurationPropertiesBindingPostProcessor.VALIDATOR_BEAN_NAME已移至EnableConfigurationProperties.VALIDATOR_BEAN_NAME
  • ConfigurationPropertiesBindingPostProcessorRegistrar支持@EnableConfigurationProperties
  • WebTestClientBuilderCustomizer已移至org.springframework.boot.test.web.reactive.server

猜你喜欢

转载自blog.csdn.net/Angry_Mills/article/details/113116126
今日推荐