Unresolved directive in v2.1.adoc - include::attributes.adoc[]

环境

  • spring5.1

  • jdk8+

Spring Boot 2.1 使用 Spring Framework 5.1。请参阅其 https:github.comspring-projectsspring-frameworkwikiUpgrading-to-Spring-Framework-5.xupgrading-to-version-51[升级指南],了解可能影响您的应用程序的任何更改。
在 Spring Boot 2.0 中弃用的类、方法和属性已在此版本中删除。请确保在升级之前您没有调用已弃用的方法。

重大变更

Bean Overriding

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

Auto-Configuration 排除

现在可以一致地应用排除项,而不仅仅是在本地应用。这适用于在 @EnableAutoConfiguration@SpringBootApplication@ImportAutoConfigurationspring.autoconfigure.exclude 属性上定义的任何排除。

Actuator 'info' and 'health' Endpoint Security

如果 spring-security 在没有任何安全配置的类路径上,infohealth 现在向外暴露以保持一致性。 如果你的类路径中有 spring-security 并且没有提供任何安全配置,你将需要明确地保护它们。

Servlet Path

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

@WebMvcTest and @WebFluxTest Security Configuration

用户配置现在自动包含在 web slice 测试中。 @WebMvcTest 寻找 WebSecurityConfigurer bean,而 @WebFluxTest 寻找 ServerHttpSecurity bean。

日志改进

Spring Framework 5.1 在处理 Web 应用程序(Spring MVC 或 Spring WebFlux)时重新审视了 debug 日志输出。如果您正在尝试调试应用程序并且想要恢复 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 Pooling

如果您使用的是 activemq-pool,则此版本中已删除支持,取而代之的是 pooled-jms,它提供相同的功能,同时符合 JMS 2.0。您可以按如下方式更新您的构建:

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

HttpPutFormContentFilter

HttpPutFormContentFilter 已被弃用,取而代之的是 FormContentFilter
因此,不再定义`spring.mvc.formcontent.putfilter.enabled` 属性。 如果您正在使用此功能,请更新到 spring.mvc.formcontent.filter.enabled

OAuth2 Client Configuration

spring.security.oauth2.client.registration 的结构已在单个树中重新设计,而不是具有 authorizationcodeclientcredentials 子命名空间。

Micrometer 'all' SLA 处理

management.metrics.distribution.sla 错误地描述了 all 仪表 ID 可用于为所有指标设置 SLA。 鉴于单位可能因仪表类型而异,因此无法正确实施此功能。

InfluxDB HttpClient 自定义

以前,声明一个 OkHttpClient.Builder bean 就足以自定义 InfluxDB 使用的客户端。 为确保此类自定义是隔离的,请改为定义一个 InfluxDbOkHttpClientBuilderProvider bean。

Maven Plugin

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

如果您正在自定义 repackage 目标,则主执行现在具有必须指定的 repackage id,请参阅 更新后的示例

Spring Version POM Property

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

移除 'spring.provides' 文件

一个 starter 可以声明一个 META-INFspring.provides,这样 IDE 就可以确定它提供了哪些依赖项。 扫描 starter POM 中它声明的直接依赖应该足以作为一个指示。 如果您负责第三方启动器并声明此文件,则可以将其删除。

Thymeleaf Spring Security 附加功能

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

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

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

Lombok

Spring Boot 2.1 从 1.16.x 升级到 Lombok 1.18.x。在 1.18 中,Lombok 将不再默认生成私有的、无参数的构造函数。它可以通过在 https:projectlombok.orgfeaturesconfiguration[lombok.config 配置文件] 中设置 lombok.noArgsConstructor.extraPrivate=true 来启用。有关 Lombok 更改的更多信息,请参阅其 https:projectlombok.orgchangelog[changelog]。

Java Persistence API dependency

作为升级到 Hibernate 5.3 的一部分,托管 Java 持久性 API 依赖项已从 org.hibernate.javax.persistence:hibernate-jpa-2.1-api 更改为 javax.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 标头大小一致

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

第三方库更新

此版本中一些值得注意的依赖项升级包括:

  • Tomcat 9

  • Undertow 2

  • Hibernate 5.3

  • JUnit 5.2

  • Micrometer 1.1

Java 11 Support

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

DataSize Support

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

Example 1. DataSize
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
// 单个文件最大
factory.setMaxFileSize(DataSize.of(100, DataUnit.MEGABYTES)); // 100MB
// / 设置总上传数据总大小
factory.setMaxRequestSize(DataSize.of(100, DataUnit.MEGABYTES));// 100MB
return factory.createMultipartConfig();
}

上下文对 ApplicationConversionService 支持

“ApplicationConversionService”现在默认注册到“SpringApplication”创建的“Environment”和“BeanFactory”。这允许您直接将应用程序转换器与核心 Spring Framework 项一起使用,例如 @Value 注释:

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

Profile Expression

配置文件匹配已得到改进,以支持 an expression format。 例如 production & (us-east | eu-central) 表示 如果 production 已激活 并且 us-east 或者 eu-central 配置 也处于激活状态.

配置文件表达式的用法如下:

Task Execution

Spring Boot现在为“ThreadPoolTaskExecutor”提供自动配置。
如果您使用的是“@EnableAsync”,则可以删除自定义的“TaskExecutor”,以便从“spring.task.execution”命名空间中进行自定义。
使用“TaskExecutorBuilder”可以轻松创建自定义的“ThreadPoolTaskExecutor”。

Task Scheduling

与new task execution support 类似,当指定了“@EnableScheduling”时,Spring Boot会自动配置“ThreadPoolTaskScheduler”。
可以使用“spring.task.scheduling”命名空间自定义任务计划程序。
“TaskSchedulerBuilder”默认使用。

Logging Groups

可以定义日志组以允许一次性配置相关日志。 例如,你可以声明一个 tomcat 日志组,让它允许你使用单个key配置 org.apache.catalina, org.apache.coyote and org.apache.tomcat 的日志。

# define the group
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat

# use the group (possibly in a different configuration file)
logging.level.tomcat=TRACE
提供了方便的“web”和“sql”组. 参阅 reference guide .

Maven Plugin

指定参数已通过如下改进: system properties and environment variables. 也可以重新打包和替换 classified artifact, 参阅 the updated documentationclassifier 属性.

Bootstrap mode for JPA setup

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

spring.data.jpa.repositories.bootstrap-mode=deferred
当将模式设置为“deferred”或“lazy”时,JPA安装程序在单独的线程中进行。

Kafka Streams Support

现在,在声明“org.apache.kafka:kafka Streams”依赖项时,会为https:kafka.apache.orgdocumentationstreams[Kafa Streams]提供自动配置。
参阅 the updated Spring Boot documentation and the Spring Kafka documentation .

Spring Data JDBC Support

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

有关Spring数据JDBC的完整细节,请参阅 reference documentation.

JMS ConnectionFactory Caching

自动配置的“ConnectionFactory”默认情况下使用“CachingConnectionFactory”进行缓存,直到启用了池选项或将“spring.jms.cache.enabled”设置为“false”。 池选项也扩展到了Artemis (see spring.jms.artemis.pool.*).

Elasticsearch REST Clients

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

JUnit 5

所有的 @…Test 注释都是用 @ExtendWith(SpringExtension.class) 进行元注释的,因此如果您使用的是JUnit 5,那么这个多余的设置部分可以被删除。 spring boot还使用了一个 maven-surefire-plugin 版本,它不需要任何自定义设置就可以使用junit5。

Security

OAuth2 WebFlux Support

已添加对WebFlux OAuth2登录的支持。OpenID连接提供程序更易于使 issuer uri 进行配置,该uri是它断言为其颁发者标识符的uri。

OAuth2 resource server support

如果 classpath 上有 spring-security-oauth2-resource-server,那么只要指定JWK set URI,spring Boot就可以设置oauth2资源服务器。

Example 2. Auth2 resource server
spring.security.oauth2.resource.jwt.jwk.set-uri=https://example.com/oauth2/default/v1/keys
This is supported for both MVC and WebFlux applications.

非web oauth 应用

现在编写非web OAuth应用程序更容易了,因为我们提供了一个自动配置的`InMemoryReactiveClientRegistrationRepository` ` bean,而不考虑应用程序类型。
如果您编写的应用程序不使用嵌入式web服务器(如CLI应用程序),现在可以直接插入和使用配置的注册存储库。

Actuator Endpoints

Caches Endpoint

新的 /actuator/caches 端点列出了可用的 CacheManager 实例及其各自的缓存和基本元数据。 参阅 the API .

Spring Integration Graph Endpoint

如果您使用的是 Spring-Integration,那么可以在`/actuator/integrationgraph` 中找到所有Spring-Integration集成组件的图形表示。 参阅 the API .

Health Endpoint

An HealthIndicatorRegistry bean is now available to add and remove HealthIndicator at runtime. The health endpoint has also been improved to query a specific indicator if necessary. For instance /actuator/health/db executes only the "db" HealthIndicator. Please see the API for more details.

A reactive HealthIndicator for Apache Cassandra is available.

Micrometer

Common Micrometer Tags

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

management.metrics.tags.region=us-east-1
management.metrics.tags.stack=prod
The example above adds a region and stack tags to all meters with a value of us-east-1 and prod respectively.上面的示例将 regionstack 标记分别添加到值为 us-east-1prod 的所有仪表中

新 Metrics Auto-configuration 支持

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

  • Hibernate metrics

  • Spring Framework’s WebClient

  • Kafka consumer metrics

  • Log4j2 metrics

  • Jetty server thread pool metrics

  • Server-side Jersey HTTP request metrics

新 registries Auto-configuration 支持

以下 metrics registries are 现在在类路径上自动配置:

  • AppOptics

  • Humio

  • KariosDB

此外,还增加了对Prometheus push gateway的支持.

其他直方图配置属性

新的`management.metrics.distribution.maximum expected value.management.metrics.distribution.minimum expected value.`属性可用于控制per-meter的最大和最小期望值。

其它

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

  • 可以使用`spring.Jackson.visiblity配置Jackson可见性`.

  • 使用自动配置的 WebServiceTemplateBuilder 更容易创建 WebServiceTemplate .

  • 当 Devtools 使用时, 错误页显示堆栈跟踪 .

  • 不再需要导出笨拙 ResourceConfig 来启用Jersey支持.

  • JNDI查找已经过改进,默认情况下启用了 resourceRef.

  • 用于rabbit 基础配置的 RetryTemplate 的自定义工作可以通过 RabbitRetryTemplateCustomizer 来获取.

  • 默认`RabbitTemplate` 的接收消息队列现在已经可配置了。

  • Tomcat的最大吞吐大小现在可以使用属性进行配置

  • 现在支持带有Reactor Netty服务器的HTTP2.

  • kafuka 自动配置现在支持 errorHandler transactionManager and afterRollbackProcessor beans.

  • 增加了对全局生成唯一JMX ObjectNames的支持 (而不是将此功能限制为 Actuator Endpoints)

  • 配置属性元数据现在已排序,不推荐的项显示在最后.

  • withDetails method on Health.Builder 现在也接受 Map.

  • A reactive ReactiveJwtDecoder 当您定义了颁发者url时,将自动配置。

  • BackgroundPreinitializer 如果 spring.backgroundpreinitializer.ignore 系统属性设置了将被禁用.

  • HiddenHttpMethodFilter 可以使用属性禁用

  • JAP starter POM现在可以在java9上开箱即用

  • 当定义了 com.mongodb.client.MongoClient (更通常的是 com.mongodb.MongoClient) MongoDB 的自动配置将被取代 .

  • 现在可以选择使用Jetty RS作为WebClient的HTTP驱动程序

  • spring.quartz 命名空间中添加了几个配置选项.

  • `@ConditionalOnEnabledEndpoint`可用于任何组件 (e.g. 仅由endpoint所需的内容,如果endpoint被禁用,则不应创建该内容).

  • @ConditionalOnMissingServletFilter is available to respect FilterRegistration beans when testing if a Filter bean is missing

  • @WebMvcTest 也可以为 Spring Data REST提供支持 (e.g. 可以支持`Sort` and Pageable request arguments等).

  • Slice tests 现在,它们都有一个“properties”属性,以便在必要时一致地自定义环境

  • 已添加对多个 RestDocsMockMvcConfigurationCustomizer

  • 安全配置现在应用于 WebTestClient. 更多关于 testing secured endpoints, 参阅 relevant section o.

  • WebExceptionHandlers 现在受 @WebFluxTest 支持`

  • @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) 现在可以为管理服务器生成单独的随机端口。

  • 自动配置排除现在一直应用.

Spring Boot 2.1 弃用

  • setConnectTimeout(int) and setReadTimeout(int) 已被弃用,取而代之的是类似 Duration 的方式.

  • 使用 int 设置数据大小的方法已被弃用,取而代之的是采用 DataSize 的变量 .

  • management.endpoints.jmx.unique-names 已被弃用,取而代之的是 spring.jmx.unique-names

  • secure attribute on @AutoConfigureMockMvc 已被弃用,取而代之的是使用 Spring Security的 @WithMockUser 注解.

  • RestTemplateBuilder.basicAuthorization 已被弃用,取而代之的是使用 basicAuthentication.

  • REQUEST_WRAPPER_FILTER_MAX_ORDER in AbstractFilterRegistrationBean and FilterRegistrationBeanOrderedFilter.REQUEST_WRAPPER_FILTER_MAX_ORDER 代替.

Configuration Property Changes

  • 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 property 被重命名为 spring.security.oauth2.resourceserver.jwt.jwk-set-uri

  • spring.cloud.enabled 属性被移除 (排除 CloudServiceConnectorsAutoConfiguration 如果你需要禁用 cloud connectors)

  • 所有 management.metrics.binders.*.enabled 属性已被删除,使用自动配置直接排除来取代他.

New and Noteworthy