Spring Boot 2.1 版本变化[翻译]

大家好,我是烤鸭:

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

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

​ 2.2 版本变化:https://blog.csdn.net/Angry_Mills/article/details/113116126

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

推荐版本: 2.1.18.RELEASE

从Spring Boot 2.0升级

Spring Framework 5.1

Spring Boot 2.1使用Spring Framework 5.1。有关可能影响您的应用程序的任何更改,请参考其升级指南

Bean覆写

默认情况下,Bean覆盖已被禁用,以防止意外覆盖Bean。如果您要依赖覆盖,则需要将设置spring.main.allow-bean-definition-overridingtrue

自动配置排除

现在,排除项将被一致地应用,而不仅仅是本地应用。这适用于上定义的任何排斥@EnableAutoConfiguration@SpringBootApplication@ImportAutoConfigurationspring.autoconfigure.exclude财产。

执行器“信息”和“健康”端点安全

Ifspring-security在类路径上没有任何安全配置,/info并且/health现在公开以确保一致性。如果您spring-security在类路径上,但是不提供任何安全性配置,则需要显式保护它们。

Servlet路径

server.servlet.path物业已移至spring.mvc.servlet.path。如果您以编程方式依赖该属性来知道DispatcherServlet请使用的路径,请DispatcherServletPath改用。

@WebMvcTest和@WebFluxTest安全配置

用户配置现在自动包含在Web Slice测试中。@WebMvcTest寻找WebSecurityConfigurerBean,而@WebFluxTest寻找ServerHttpSecurityBean

记录优化

debug当使用Web应用程序(Spring MVC或Spring WebFlux)时,Spring Framework 5.1重新访问了日志输出。如果您尝试调试应用程序,并且想要恢复Spring Boot 2.0样式的日志记录,则应将以下内容添加到您的application.properties

logging.level.web =debug

您可能还需要设置spring.http.log-request-details=true登录实际要求的细节。默认情况下,此属性是false因为它有可能公开敏感信息。

Narayana JTA支持

Narayana支持已被删除,以支持与Narayana版本更加一致的官方支持。如果您使用spring-boot-starter-jta-narayana,则新坐标如下:

<dependency>
    <groupId> me.snowdrop </groupId>
    <artifactId> narayana-spring-boot-starter </artifactId>
    <version> 2.0.1 </version>
</dependency>

查看文档以获取更多详细信息。

ActiveMQ池

如果您使用activemq-pool,则在此发行版中已删除了支持,pooled-jms以便在支持JMS 2.0的同时提供相同的功能。您可以按以下方式更新构建:

<dependency>
    <groupId> org.messaginghub </groupId>
    <artifactId> pooled-jms </artifactId>
</dependency>

HttpPutFormContentFilter

HttpPutFormContentFilter已不推荐使用FormContentFilterspring.mvc.formcontent.putfilter.enabled不再定义该属性。如果您正在使用此功能,请更新为spring.mvc.formcontent.filter.enabled

OAuth2客户端配置

spring.security.oauth2.client.registration的结构已在单个树中进行了修改,而不是具有authorizationcode和clientcredentials 替代的命名空间。

Micrometer ‘all’ SLA Handling

management.metrics.distribution.sla错误地描述了所有的meterID可以被用来设置一个SLA的所有指标。鉴于仪表可能因仪表类型而异,因此无法正确实现此功能。

InfluxDB HttpClient自定义

以前,声明一个OkHttpClient.Builder足以自定义InfluxDB使用的客户端。为了确保隔离这些定制,请定义一个InfluxDbOkHttpClientBuilderProvider

Maven插件

finalName属性不再可自定义以与标准Maven插件的行为保持一致。

如果您要自定义repackage目标,那么现在repackage必须指定主要执行的ID ,请参阅更新的示例

Srping.Version POM属性

POM中spring.version定义的属性spring-boot-dependencies已重命名。要覆盖Spring Framework版本,您现在应该spring-framework.version改为使用属性。除非绝对必要,否则我们通常建议您坚持使用托管框架版本。

删除’spring.provides’文件

初学者可以声明一个,META-INF/spring.provides以便IDE可以确定其提供的依赖项。扫描启动程序POM以获取它声明的直接依赖关系就足够了。如果您负责第三方启动程序并声明了此文件,则可以将其删除。

Thymeleaf Spring Security Extras

Thymeleaf的Spring Security Extras模块的依赖关系管理和自动配置已从thymeleaf-extras-springsecurity4更改为thymeleaf-extras-springsecurity5。如果您使用的是模块,则应更新pom.xmlbuild.gradle依赖thymeleaf-extras-springsecurity5

Json Simple

json-simple不再提供的依赖管理,并且JsonParser使用它的实现也已删除。

Jersey 1

不再支持Jersey 1。请升级到Jersey 2。

Hibernate EhCache支持

如果您hibernate-ehcache使用EhCache 2作为Hibernate的二级缓存提供程序,则从Hibernate 5.3开始不推荐使用。

Endpoint ID names

如果您已经开发了自己的执行器@Endpointbean,则应确保它们遵循Spring Boot 2.1中引入的更严格的命名规则。具体来说,ID应该仅是字母数字,并且必须以字母开头(EndpointId有关完整的详细信息,请参阅类文档)。

如果您使用-.字符,则Spring Boot 2.1将记录警告并要求您迁移到正确的格式。

Lombok

Spring Boot 2.1已从1.16.x升级到Lombok1.18.x。在1.18中,默认情况下,Lombok将不再生成私有的无参数构造函数。可以通过lombok.noArgsConstructor.extraPrivate=truelombok.config配置文件中进行设置来启用它。有关Lombok变更的更多信息,请参阅其变更日志

Java Persistence API依赖性

作为升级到Hibernate 5.3的一部分,托管的Java Persistence API依赖项已从更改org.hibernate.javax.persistence:hibernate-jpa-2.1-apijavax.persistence:javax.persistence-api。如果您正在使用spring-boot-starter-data-jpa或依赖于通过Hibernate传递的API,那么您将不受此更改的影响。

JpaProperties

特定于Hibernate的属性已从移入JpaProperties名为的单独类HibernateProperties。如果您正在使用JpaProperties.getHibernateProperties(HibernateSettings),则现在应同时注入HibernatePropertiesJpaProperties以确定属性:

Map<String, Object> properties = hibernateProperties.determineHibernateProperties(    	jpaProperties.getProperties(), new HibernateSettings());

所有嵌入式Web服务器上的最大HTTP标头大小一致

现在,默认的最大HTTP标头大小在四个受支持的嵌入式Web服务器(Jetty,Netty,Tomcat和Undertow)上是一致的,为8KB。大小可以使用server.max-http-header-size属性进行自定义。

第三方库升级

Spring Boot 2.1建立在Spring Framework 5.1之上,并需要它。

我们已尽可能升级到其他第三方jar的最新稳定版本。此版本中一些值得注意的依赖项升级包括:

  • Tomcat 9
  • Undertow 2
  • Hibernate 5.3
  • JUnit 5.2
  • Micrometer 1.1

Java 11支持

Spring Boot 2.1仍与Java 8兼容,但现在也支持Java11。我们已配置了持续集成,以针对最新的Java 11版本构建和测试Spring Boot。

DataSize支持

如果属性需要以字节或类似的方便单位表示大小,则可以公开org.springframework.util.unit.DataSize属性。与DurationSpring Boot 2.0中引入的支持类似,数据大小支持一种简单的格式(即10MB10 MB)和元数据支持。所有相关的配置属性已更新为使用新类型。

上下文ApplicationConversionService支持

ApplicationConversionService现在默认与注册EnvironmentBeanFactory所创造SpringApplication。这使您可以将应用程序转换器直接用于核心Spring Framework项目,例如@Value注释:

@Value("${my.duration:10s}")
private Duration duration;

Profile Expression

配置文件匹配已得到改进,以支持表达式格式。例如production & (us-east | eu-central)表示匹配,如果production profile是激活的,那么us-east eu-central 都是激活的

概要文件表达式可以按如下方式使用:

任务执行

Spring Boot现在为提供自动配置ThreadPoolTaskExecutor。如果使用@EnableAsyncTaskExecutor则可以删除自定义项,而使用spring.task.execution命名空间中可用的自定义项。ThreadPoolTaskExecutor使用可以轻松创建自定义TaskExecutorBuilder

任务调度

与新的任务执行支持类似,Spring Boot自动配置一个ThreadPoolTaskSchedulerwhen @EnableScheduling。可以使用spring.task.scheduling名称空间来自定义任务计划程序。TaskSchedulerBuilder默认情况下,A也可用。

Logging Groups

可以定义记录器组,以允许一次性配置相关记录器。例如,您可以声明一个tomcat组,该组允许您配置org.apache.catalinaorg.apache.coyoteorg.apache.tomcat使用单个键记录器:

#定义组
logging.group.tomcat = org.apache.catalina,org.apache.coyote,org.apache.tomcat
 
#使用组(可能在其他配置文件中)
logging.level.tomcat = TRACE

方便websql团体提供外的开箱。有关详细信息,请参见参考指南

Maven插件

使用系统属性环境变量的专用选项对指定参数进行了改进。也可以重新包装和更换classified神器,看到了更新的文档中的classifier属性。

JPA设置的引导模式

Spring Data Lovelace为存储库引入了一种“引导模式”。Spring Boot公开了一个属性,可以设置该属性来控制JPA存储库的boostrap模式。例如,要推迟JPA存储库的初始化,只需将以下内容添加到您的配置中:

spring.data.jpa.repositories.bootstrap-mode = deferred

将模式设置为deferred或时lazy,JPA设置在单独的线程中进行。

Kafka Streams支持

现在,在声明依赖项时为Kafa Streams提供自动配置org.apache.kafka:kafka-streams。有关详细信息,请参阅更新的Spring Boot文档Spring Kafka文档

Spring Data JDBC支持

Spring Data包括对JDBC的存储库支持,并将自动为上的方法生成SQL CrudRepository。当必要的依赖项位于类路径上时,Spring Boot将自动配置Spring Data的JDBC存储库。可以将它们添加到您的项目中,而只需依赖于spring-boot-starter-data-jdbc

有关Spring Data JDBC的完整详细信息,请参考参考文档

JMS ConnectionFactory缓存

自动配置ConnectionFactory默认情况下使用进行缓存,CachingConnectionFactory直到启用池选项或spring.jms.cache.enabled将其设置为为止false。合并选项也已扩展到Artemis(请参阅参考资料spring.jms.artemis.pool.*)。

Elasticsearch REST客户端

作为Jest的替代选项,命名空间的RestClient和的自动配置RestHighLevelClient提供了可配置选项spring.elasticsearch.rest.*

JUnit 5

所有@…Test注释都带有meta注释,@ExtendWith(SpringExtension.class)因此,如果您使用的是JUnit 5,则可以删除该设置的冗余部分。SpringBoot还使用maven-surefire-plugin不需要使用任何自定义设置即可使用JUnit 5的版本。

安全

OAuth2 WebFlux支持

添加了对WebFlux OAuth2登录的支持。使用OpenID Connect提供程序可以更轻松地配置OpenID Connect提供程序issuer-uri,它将断言为它的发行者标识符。

OAuth2资源服务器支持

如果您spring-security-oauth2-resource-server在类路径中,则只要指定了JWK Set URI,Spring Boot就可以设置OAuth2资源服务器。例如:

spring.security.oauth2.resource.jwt.jwk.set-uri = https://example.com/oauth2/default/v1/keys

MVC和WebFlux应用程序都支持此功能。

非Web OAuth应用程序

现在,InMemoryReactiveClientRegistrationRepository无论我们使用哪种应用程序类型,我们都提供了一个自动配置的Bean,因此可以更轻松地编写非Web OAuth应用程序。如果您正在编写不使用嵌入式Web服务器的应用程序(例如CLI应用程序),则现在可以直接注入并使用配置的注册存储库。

执行器端点

缓存端点

一个新的/actuator/caches端点列出了可用的CacheManager实例及其各自的带有基本元数据的缓存。有关更多详细信息,请参见API

Spring集成图端点

如果您使用的是Spring Integration,则可以在处公开所有Spring Integration组件的图形表示/actuator/integrationgraph。请参阅API以获取更多详细信息。

健康终点

一个HealthIndicatorRegistrybean是现在可以添加和删除HealthIndicator在运行时。该health端点也得到了改进,如果需要查询特定指标。例如/actuator/health/db仅执行“ db” HealthIndicator。请参阅API以获取更多详细信息。

提供HealthIndicator了Apache Cassandra的反应式。

Micrometer

通用千分尺标签

通用标签可以声明性地应用于所有仪表,如以下示例所示:

management.metrics.tags.region=us-east-1
management.metrics.tags.stack=prod

上面的示例在所有仪表上分别添加regionstack标记,其值分别为us-east-1prod

对新指标的自动配置支持

指标覆盖范围已得到改进,包括:

  • Hibernate metrics
  • Spring Framework’s WebClient
  • Kafka consumer metrics
  • Log4j2 metrics
  • Jetty server thread pool metrics
  • Server-side Jersey HTTP request metrics

对新注册表的自动配置支持

在类路径上时,以下度量标准注册表现在已自动配置:

  • AppOptics
  • Humio
  • KariosDB

此外,已添加了对Prometheus推送网关的支持。

其他直方图配置属性

可以使用newmanagement.metrics.distribution.maximum-expected-value.*management.metrics.distribution.minimum-expected-value.*属性来控制每米基准值的最大和最小期望值。

其他改动

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

  • 可以使用来配置Jackson可见性spring.jackson.visiblity.*
  • WebServiceTemplate使用自动配置创建一个更容易WebServiceTemplateBuilder
  • 错误页面显示使用Devtools时的堆栈跟踪。
  • 不再需要导出虚拟对象ResourceConfig以启用Jersey支持。
  • JNDI查找已得到改进resourceRef,默认情况下启用。
  • RetryTemplate通过访问来自Rabbit基础架构的定制RabbitRetryTemplateCustomizer
  • RabbitTemplate现在可以配置默认的接收队列
  • Tomcat的最大吞咽大小现在可以使用属性进行配置
  • 现在支持带有Reactor Netty Server的HTTP / 2。
  • Kafka自动配置现在支持errorHandler transactionManagerafterRollbackProcessorbean。
  • 添加了对全局生成唯一JMX ObjectName的支持(而不是将此功能限制为Actuator Endpoints)
  • 现在对配置属性元数据进行了排序,不赞成使用的项目最后出现。
  • 现在的withDetails方法Health.Builder还接受Map
  • ReactiveJwtDecoder现在,当您定义了发行者URL时,将自动配置反应式。
  • BackgroundPreinitializer如果spring.backgroundpreinitializer.ignore设置了系统属性,可以禁用
  • HiddenHttpMethodFilter 可以使用属性禁用
  • JAP入门POM现在可以在Java 9+上开箱即用
  • 现在,在com.mongodb.client.MongoClient定义bean(以及更常见的com.mongodb.MongoClient)时,MongoDB自动配置将退出。
  • 您现在可以选择将Jetty RS用作WebClient的HTTP驱动程序
  • spring.quartz命名空间中添加了几个配置选项。
  • @ConditionalOnEnabledEndpoint 可以在任何组件上使用(例如,仅端点需要的组件,如果端点被禁用,则不应创建)。
  • @ConditionalOnMissingServletFilterFilterRegistration在测试是否Filter缺少bean时可以尊重bean
  • @WebMvcTest也自动配置Spring Data REST(例如,支持SortPageable请求参数)。
  • 切片测试现在都具有一个properties属性,可以根据需要一致地自定义环境
  • 支持增加了多个 RestDocsMockMvcConfigurationCustomizer
  • 安全配置现已应用于WebTestClient。有关测试安全端点的更多信息,请参考Spring Security参考文档的相关部分
  • WebExceptionHandlers 支持 @WebFluxTest
  • @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) 现在可以为管理服务器生成一个单独的随机端口。
  • 现在,自动配置排除项将始终应用。

Spring Boot 2.1中的弃用

  • setConnectTimeout(int)并且setReadTimeout(int)已被不赞成使用类似方法所取代Duration
  • 设置数据大小的方法,int(废弃)已替换为 DataSize
  • management.endpoints.jmx.unique-names 不赞成使用 spring.jmx.unique-names
  • 为了支持使用Spring Security的注释,不推荐使用secureon属性。@AutoConfigureMockMvc@WithMockUser
  • RestTemplateBuilder.basicAuthorization已不推荐使用basicAuthentication
  • REQUEST_WRAPPER_FILTER_MAX_ORDERAbstractFilterRegistrationBeanFilterRegistrationBean已被替换OrderedFilter.REQUEST_WRAPPER_FILTER_MAX_ORDER

配置属性更改

  • spring.security.oauth2.client.registration.login.*.redirect-uri-template不赞成使用该物业spring.security.oauth2.client.registration.login.*.redirect-uri
  • spring.security.oauth2.resource.jwt.jwk.set-uri属性已重命名为spring.security.oauth2.resourceserver.jwt.jwk-set-uri
  • spring.cloud.enabled属性已删除(CloudServiceConnectorsAutoConfiguration如果您需要禁用云连接器,则不包括在内)
  • management.metrics.binders.*.enabled已删除所有属性,以便直接排除自动配置。

Guess you like

Origin blog.csdn.net/Angry_Mills/article/details/113113486