Spring Boot 2.1.RELEASE
参考链接:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.1-Release-Notes#new-and-noteworthy
Spring Boot 2.1 Release Notes
Upgrading from Spring Boot 2.0
Deprecations from Spring Boot 2.0
在Spring Boot 2.0中弃用的类、方法和属性已经在这个版本中删除了。请确保在升级之前没有调用已弃用的方法。
Spring Framework 5.1
Spring Boot 2.1 使用 Spring Framework 5.1. 请参考它的升级指南-upgrade guide,了解任何可能影响您的应用程序的更改。
Bean Overriding
默认情况下禁用了Bean重写,以防止Bean被意外地重写。如果依赖于重写,则需要设置spring.main.allow-bean-definition-overriding=true.
Auto-Configuration Exclusion
排除现在被一致地应用,而不仅仅是局部地应用。这适用于在@EnableAutoConfiguration, @SpringBootApplication, @ImportAutoConfiguration或 spring.autoconfigure.exclude属性。
Actuator 'info' and 'health' Endpoint Security
如果spring-security在没有任何安全配置的类路径上,那么/info和/health现在将公开以保持一致性。如果在类路径上有spring-security,但不提供任何安全配置,则需要显式保护它们。
Servlet Path
The server.servlet.path property has moved to spring.mvc.servlet.path. If you were relying on that property programmatically to know the path of the DispatcherServlet please use DispatcherServletPath instead.
server.servlet.path 属性已移至spring.mvc.servlet.path。如果您通过编程的方式依赖该属性来了解DispatcherServlet的路径,请使用DispatcherServletPath。
@WebMvcTest and @WebFluxTest Security Configuration
用户配置现在自动包含在web片测试中。@WebMvcTest查找WebSecurityConfigurer bean,而@WebFluxTest查找ServerHttpSecurity bean。
Logging Refinements
Spring Framework 5.1在使用web应用程序(Spring MVC或Spring WebFlux)时重新访问了调试日志输出。如果你试图调试一个应用程序,并且你想恢复Spring Boot 2.0风格的日志记录,你应该在application.properties中添加以下内容:
logging.level.web=debug
您可能还想设置spring.http.log-request-details为true,记录实际请求的详细信息。默认情况下,此属性为false,因为它可能暴露敏感信息。
Narayana JTA Support
为了支持与Narayana版本更加一致的官方支持,Narayana的支持已经被删除。如果你使用的是spring-boot-starter-jta-narayana,新的坐标如下:
me.snowdrop narayana-spring-boot-starter 2.0.1
请参考 the documentation 以了解更多细节。
ActiveMQ Pooling
If you were using activemq-pool, support has been removed in this release in favor of pooled-jms that offers the same features while being JMS 2.0 compliant. You can update your build as follows:
如果您正在使用activemq-pool,那么在这个版本中已经删除了对pooled-jms的支持,pooled-jms提供了相同的特性,同时兼容JMS 2.0。你可以更新你的构建如下:
HttpPutFormContentFilter
HttpPutFormContentFilter has been deprecated in favor of FormContentFilter. As a result the spring.mvc.formcontent.putfilter.enabled property is no longer defined. If you were using this feature, please update to spring.mvc.formcontent.filter.enabled.
HttpPutFormContentFilter已经被弃用,取而代之的是FormContentFilter。 spring.mvc.formcontent.putfilter.enabled 结果属性不在被定义。如果你正在使用这个特性,请更新到spring.mvc.formcontent.filter.enabled。
OAuth2 Client Configuration
The structure of the spring.security.oauth2.client.registration has been reworked in a single tree rather than having an authorizationcode and clientcredentials sub namespace.
spring.security.oauth2.client.registration 的结构已经在在单个树中重新注册,而不是使用authorizationcode和clientcredentials子名称空间。
Micrometer 'all' SLA Handling
management.metrics.distribution.sla错误地描述了一个all meter ID可以用于为所有度量设置SLA 。这个特性不能正确地实现,因为单位可能会根据仪表类型不同而不同。
InfluxDB HttpClient Customization
在前面,声明OkHttpClient.Builder bean足以定制InfluxDB使用的客户端。要确保隔离此类自定义,请定义一个InfluxDbOkHttpClientBuilderProvider bean。
Maven Plugin
finalName属性不再是可定制的,以与标准Maven插件的行为保持一致。
如果您正在定制repackage目标,那么主执行现在有一个必须指定的repackage id,参考the updated sample.。
Spring Version POM Property
在spring-boot-dependencies POM中定义的spring.version属性已被重命名。要覆盖Spring Framework版本,现在应该使用 spring-framework.version属性。除非绝对必要,我们通常建议您坚持使用托管框架版本。
Removal of 'spring.provides' Files
starter 可以声明META-INF/spring.provides,以便IDE能够找出它所提供的依赖项。扫描starter POM以寻找它声明的直接依赖项应该足以作为一种指示。如果您是第三方启动器的负责人,并且声明了这个文件,那么可以删除它。
Thymeleaf Spring Security Extras
Thymeleaf的Spring Security Extras模块的依赖管理和自动配置已经从 thymeleaf-extras-springsecurity4 切换到 thymeleaf-extras-springsecurity5。如果您正在使用模块,则应该更新您的pom.xml或build.gradle依赖thymleaf -extras-springsecurity5。
Json Simple
不再提供json-simple的依赖项管理,使用它的JsonParser实现也已删除。
Jersey 1
Jersey 1 不再支持。请升级到 Jersey 2.
Hibernate EhCache Support
如果你使用hibernate-ehcache来使用EhCache 2作为Hibernate的二级缓存提供商,它在Hibernate 5.3中已经弃用。
Endpoint ID names
如果您已经开发了自己的执行器@Endpoint bean,那么您应该确保它们遵循Spring Boot 2.1中引入的更严格的命名规则。具体来说,IDs应该是只包含字母数字的,并且必须以字母开头(有关完整细节,请参阅EndpointId类文档)。
如果你用 - or . 字符 Spring Boot 2.1将记录一个警告并要求您迁移到正确的格式。
Lombok
Spring Boot 2.1已经升级到Lombok 从1.16.x 到 1.18.x。在1.18中,默认情况下Lombok将不再生成私有的、无参数的构造函数。在 lombok.config configuration file 中,可以通过设置 lombok.noArgsConstructor.extraPrivate=true 启动它。有关Lombok更改的更多信息,请参阅其更改日志-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来确定属性:
Consistent max HTTP header size across all embedded web servers
The default max HTTP header size is now consistent across the four supported embedded web servers (Jetty, Netty, Tomcat, and Undertow) and is 8KB. The size can be customized using the server.max-http-header-size property.
默认的最大HTTP报头大小现在在四个支持的嵌入式web服务器(Jetty、Netty、Tomcat和Undertow)中是一致的,是8KB。可以使用server.max-http-header-size属性。
New and Noteworthy
Tip Check the configuration changelog 查看配置更改的完整概述。
Third-party Library Upgrades
Spring Boot 2.1构建于Spring Framework 5.1之上,并且需要Spring Framework 5.1。
我们已经尽可能地升级到其他第三方jar的最新稳定版本。这个版本中一些值得注意的依赖升级包括:
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中引入的持续时间支持类似,数据大小支持一种简单的格式(即10MB for 10 兆字节)和元数据支持。所有相关配置属性都已更新,以使用新类型。
Context ApplicationConversionService Support
ApplicationConversionService 现在默认注册到SpringApplication创建的环境和BeanFactory中。这允许你直接使用应用程序转换器和Spring Framework 的核心项目,比如@Value注释:
Profile Expression
Profile matching has been improved to support an expression format. For instance production & (us-east | eu-central) indicates a match if the production profile is active and either the us-eas to reu-central profiles are active.
配置文件匹配已得到改进,以支持一种表达式格式- an expression format。例如,production & (us-east | eu-central) 表示匹配,如果production 配置文件是激活的,并且 us-east 和 eu-central 配置文件是激活的。
配置文件表达式可以使用如下:
Enable componets using @Profile
Load multi-profile YAML Documents
Enable Logback configuration using <springProfile>
Task Execution
Spring Boot现在为ThreadPoolTaskExecutor提供自动配置。如果你正在使用@EnableAsync,你的自定义TaskExecutor可以被删除,以便从spring.task.execution namespace中进行定制。使用TaskExecutorBuilder可以轻松创建自定义ThreadPoolTaskExecutor。
Task Scheduling
与新的任务执行支持类似,当指定@EnableScheduling时,Spring Boot自动配置ThreadPoolTaskScheduler。任务调度程序可以使用spring.task.scheduling 进行定制。默认情况下,TaskSchedulerBuilder也是可用的。
Logging Groups
Logger groups can be defined to allow related loggers to be configured in one go. For example, you could declare a tomcat group that allows you to configure org.apache.catalina, org.apache.coyote and org.apache.tomcat loggers with a single key:
可以定义记录器组,以允许一次性配置相关的记录器。例如,您可以声明一个允许配置具有单独key的org.apache.catalina, org.apache.coyote和org.apache.tomcat 日志记录器的tomcat组。
方便的web和sql组是开箱即用的。See the reference guide for details.
Maven Plugin
指定参数已经改进为系统属性(system properties)和环境变量(environment variables)的专用选项。也可以重新打包并替换分类工件,查看分类器属性的更新文档-the updated documentation。
Bootstrap mode for JPA setup
Spring Data Lovelace introduces a 'bootstrap mode' for the repositories. Spring Boot exposes a property that can be set to control the boostrap mode of JPA repositories. For instance, to defer initialization of JPA repositories, simply add the following to your configuration:
Spring Data Lovelace为存储库引入了一种“bootstrap mode”。Spring Boot公开了一个属性,可以设置该属性来控制JPA存储库的引导模式。例如,要延迟JPA存储库的初始化,只需在配置中添加以下内容:
spring.data.jpa.repositories.bootstrap-mode=deferred
当将模式设置为延迟时,JPA设置将在一个单独的线程中进行。
Kafka Streams Support
自动配置现在提供给Kafa Streams当一个org.apache.kafka:kafka-streams 依赖关系被声明了。详情请参阅更新的the updated Spring Boot documentation 文档和Spring Kafka documentation 文档。
Spring Data JDBC Support
Spring Data包括对JDBC的存储库支持,并将自动为CrudRepository上的方法生成SQL。当必要的依赖项在类路径上时,Spring Boot将自动配置Spring Data的JDBC存储库。它们可以通过spring-boot-starter-data-jdbc的单个依赖项添加到项目中。
关于Spring Data JDBC的完整细节,请参阅reference documentation.
JMS ConnectionFactory Caching
The auto-configured ConnectionFactory is cached by default using CachingConnectionFactory until the pooling option is enabled or spring.jms.cache.enabled is set to false. Pooling option has also been extended to Artemis (see spring.jms.artemis.pool.*).
自动配置的ConnectionFactory默认使用CachingConnectionFactory进行缓存,直到启用 pooling 选项或spring.jms.cache.enabled 设置为false。pooling 选项也被扩展到Artemis(参见spring.jms.artemis.pool.*)。
Elasticsearch REST Clients
作为Jest的替代选项,RestClient和RestHighLevelClient的自动配置提供了spring.elasticsearch.rest.*名称空间中的可配置选项。
JUnit 5
All @… annotations are meta-annotated with @ExtendWith(SpringExtension.class) so this redundant part of the setup can be removed if you’re using JUnit 5. Spring Boot also uses a maven-surefire-plugin version that does not require any custom setup to use JUnit 5.
所有的@…Test注解都是用 @ExtendWith(SpringExtension.class)进行元注解的,所以如果您使用JUnit 5,就可以删除这个多余的设置部分。Spring Boot还使用maven-surefire-plugin版本,使用JUnit 5不需要任何自定义设置。
Security
OAuth2 WebFlux Support
Support for WebFlux OAuth2 login has been added. OpenID Connect providers are easier to configure using an issuer-uri which is the URI that the it asserts as its Issuer Identifier.
添加支持WebFlux OAuth2登录。使用 issuer-uri (其声明为发布者标识符的URI)更容易配置OpenID连接提供者。
OAuth2 resource server support
If you have spring-security-oauth2-resource-server on your classpath, Spring Boot can set up an OAuth2 Resource Server as long as a JWK Set URI is specified. For instance:
如果您的类路径上有spring-security-oauth2-resource-server,那么只要指定了JWK集URI, Spring Boot就可以设置OAuth2资源服务器。例如:
MVC和WebFlux应用程序都支持这一点。
Non-web OAuth Applications
现在,编写非web OAuth应用程序变得更容易了,因为我们提供了一个自动配置的InMemoryReactiveClientRegistrationRepository bean,而不管应用程序类型是什么。如果您正在编写一个不使用嵌入式web服务器的应用程序(例如CLI应用程序),您现在可以直接注入并使用配置的注册存储库。
Actuator Endpoints
Caches Endpoint
A new /actuator/caches endpoint lists the available CacheManager instances and their respective caches with basic metadata. Seethe APIfor more details.
一个新的/actuator/caches端点列出了可用的CacheManager实例和它们各自的带有基本元数据的缓存。查看the API了解更多细节。
Spring Integration Graph Endpoint
If you are using Spring Integration, a graph representation of all Spring Integration components can be exposed at /actuator/integrationgraph. Please seethe APIfor more details.
如果您正在使用Spring Integration,所有Spring Integration 组件的图形表示可以在/actuator/integrationgraph处公开。详情请参阅the API。
Health Endpoint
现在可以使用HealthIndicatorRegistry bean在运行时添加和删除HealthIndicator。运行状况端点也得到了改进,可以在必要时查询特定的指示器。例如 /actuator/health/db只执行 “db” HealthIndicator。详情请参阅the API。
Apache Cassandra的反应性HealthIndicator 可用。
Micrometer
Common Micrometer Tags
通用标签可以声明地应用到所有仪表,如下面的例子所示:
上面的例子为所有值分别为us-east-1和prod的仪表添加了region和stack标签。
Auto-configuration Support For New Metrics
指标覆盖率得到了改进,包括:
Hibernate metrics
Spring Framework’s WebClient
Kafka consumer metrics
Log4j2 metrics
Jetty server thread pool metrics
Server-side Jersey HTTP request metrics
Auto-configuration support for new registries
以下指标注册表现在在类路径上自动配置:
AppOptics
Humio
KariosDB
此外,还添加了对Prometheus push gateway的支持。
Additional histogram configuration properties
新的management.metrics.distribution.maximum-expected-value.*和management.metrics.distribution.minimum-expected-value.* 属性可用于控制每米(per-meter basis)的最大值和最小期望值。
Miscellaneous
除了上面列出的变化,还有很多小的调整和改进,包括:
Jackson 可见性(visibility)使用spring.jackson.visiblity.*进行配置。
使用自动配置的WebServiceTemplateBuilder更容易创建WebServiceTemplate。
当使用Devtools时,错误页面显示堆栈跟踪。
不再需要导出虚拟资源(ResourceConfig )来启用Jersey支持。
JNDI查找已经得到改进,默认情况下启用了resourceRef。
可以通过RabbitRetryTemplateCustomizer定制Rabbit基础设施使用的RetryTemplate。
默认RabbitTemplate的接收队列现在是可配置的
Tomcat的最大swallow大小现在可以通过属性进行配置
HTTP/2 with Reactor Netty Server 现在被支持。
Kafka自动配置现在支持errorHandler、transactionManager和afterRollbackProcessor bean。
添加了对全局生成唯一 JMX ObjectNames的支持(而不是将此特性限制在执行器端点( Actuator Endpoints))
配置属性元数据现在是有序的,弃用的项出现在最后。
关于Health.Builder 的withDetails方法现在也支持Map。
A reactive ReactiveJwtDecoder is now auto-configured when you have an issuer url defined.
当您定义了一个 issuer url时,一个响应式ReactiveJwtDecoder现在是自动配置的。
BackgroundPreinitializer可以被禁用,如果一个spring.backgroundpreinitializer.ignore 系统属性被设置。
HiddenHttpMethodFilter 可以被启动通过使用属性。
The JAP starter POM 现在开箱即用在 Java 9+
MongoDB的自动配置现在将退出当 com.mongodb.client.MongoClient bean被定义(以及更常见的com.mongodb.MongoClient)。
您现在可以选择使用Jetty RS作为web客户端的HTTP驱动程序
在spring.quartz空间添加了几个配置选项。
@ConditionalOnEnabledEndpoint可以使用在任何component (例如:仅端点需要的内容,如果端点被禁用,则不应该创建这些内容).
@ConditionalOnMissingServletFilter 是值得获得尊重在 FilterRegistration beans当测试是否缺少一个Filter bean时。
@WebMvcTest也会自动配置Spring Data REST(例如支持排序和可分页请求参数)。
切片测试(slice tests)现在都有一个properties属性,可以在必要时一致地自定义环境。
支持添加了多个RestDocsMockMvcConfigurationCustomizer
安全配置现在应用到WebTestClient。有关测试安全端点的更多信息,请参阅Spring Security参考文档的相关部分-relevant section。
@WebFluxTest现在支持WebExceptionHandlers
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)现在可以为管理服务器生成一个单独的随机端口。
自动配置排除现在被一致地应用。
Deprecations in Spring Boot 2.1
setConnectTimeout(int)和setReadTimeout(int)已被弃用,取而代之的是需要持续时间(Duration)的类似方法。
使用int设置数据大小的方法已被弃用,并被采用DataSize的变量所取代。
management.endpoints.jmx.unique-names已被弃用,取而代之的是spring.jmx.unique-names。
@AutoConfigureMockMvc 上的安全属性已被弃用,取而代之的是Spring Security’s @WithMockUser 注解。
RestTemplateBuilder.basicAuthorization已被弃用,取而代之的是basicAuthentication。
REQUEST_WRAPPER_FILTER_MAX_ORDER in AbstractFilterRegistrationBean and FilterRegistrationBean 已经被 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 属性已经改名为 spring.security.oauth2.resourceserver.jwt.jwk-set-uri。
spring.cloud.enabled 属性已经被删除(如果需要禁用云连接器,请排除CloudServiceConnectorsAutoConfiguration)。
所有 management.metrics.binders.*.enabled 属性被删除,取而代之的是 直接排除自动配置。