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
、@ImportAutoConfiguration
或 spring.autoconfigure.exclude
属性上定义的任何排除。
Actuator 'info' and 'health' Endpoint Security
如果 spring-security
在没有任何安全配置的类路径上,info
和 health
现在向外暴露以保持一致性。
如果你的类路径中有 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>
参阅 the documentation . |
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
的结构已在单个树中重新设计,而不是具有 authorizationcode
和 clientcredentials
子命名空间。
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.xml
或 build.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)
,你现在应该同时注入 HibernateProperties
和 JpaProperties
来确定属性:
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 兆字节)和元数据支持。
所有相关的配置属性都已更新为使用新类型。
@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
配置 也处于激活状态.
配置文件表达式的用法如下:
-
使用“@Profile”启用组件`
-
使用`<springProfile>`
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 documentation 的 classifier
属性.
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资源服务器。
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.上面的示例将 region 和 stack 标记分别添加到值为 us-east-1 和 prod 的所有仪表中
|
新 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
andafterRollbackProcessor
beans. -
增加了对全局生成唯一JMX ObjectNames的支持 (而不是将此功能限制为 Actuator Endpoints)
-
配置属性元数据现在已排序,不推荐的项显示在最后.
-
withDetails
method onHealth.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 respectFilterRegistration
beans when testing if aFilter
bean is missing -
@WebMvcTest
也可以为 Spring Data REST提供支持 (e.g. 可以支持`Sort` andPageable
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)
andsetReadTimeout(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
inAbstractFilterRegistrationBean
andFilterRegistrationBean
被OrderedFilter.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
属性已被删除,使用自动配置直接排除来取代他.