大家好,我是烤鸭:
最近在把低版本的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.mail
和org.glassfish:javax.el
现在org.glassfish:jakarta.el
。如果您不太可能直接使用这些依赖关系,请更新您的依赖关系pom.xml
或build.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.5,6.6和6.7的细节重大更改网页。
不推荐使用Elasticsearch transport和Jest客户端,而希望使用其他选项RestHighLevelClient
。有关Elasticsearch支持的参考文档已更新。
Hibernate 方言
现在,Spring Boot允许Hibernate选择要使用的方言,而不是根据检测到的数据库应用默认方言。如果您对此功能感兴趣,请确保您未明确指定数据库平台(即通过spring.jpa.database
或spring.jpa.database-platform
)。
如果您以前配置了方言,则可能要删除自定义项。
执行器HTTP跟踪和审核默认情况下处于禁用状态
由于默认存储库实现是在内存中并且可能消耗太多资源并且不支持群集,因此默认情况下不再启用Actuator HTTP跟踪和审核功能。对于健壮的生产级HTTP跟踪,我们建议使用Spring Cloud Sleuth或类似。
要启用HTTP跟踪,请贡献一个bean实现HttpTraceRepository
或AuditEventRepository
重新启用这些功能。配置属性可用于关闭这些功能,即使在这些bean存在的情况下也是如此(请参阅management.auditevents.enabled
和management.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-core
或org.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.enabled
为true
。
记录最大历史记录
在<rollingPolicy>
默认的logback配置已更新为使用<maxHistory>(7天)
。可以使用logging.file.max-history
配置属性对其进行调整。
HttpHiddenMethodFilter
默认禁用
_method
现在默认情况下将禁用处理请求参数的过滤器,因为如果请求正文可能包含参数,则会导致请求正文的早期消耗。这可以通过设置或者被恢复spring.webflux.hiddenmethod.filter.enabled
或spring.mvc.hiddenmethod.filter.enabled
到true
。
健康指标
为了实现新的健康指标组功能,不推荐使用许多类。如果您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格式details
以components
用于第一级元素。这有助于区分由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=false
Spring Boot的@Configuration
类,减少了启动时间和内存使用量。 proxyBeanMethods
是@Configuration
Spring Framework 5.2 M1中引入的新属性。 proxyBeanMethods
也可作为一个属性@SpringBootApplication
和@SpringBootConfiguration
。
在使用bootRun
Gradle或spring-boot:run
Maven在开发时启动应用程序时,JVM将配置有标志(-Xverify:none
和-XX:TieredStopAtLevel=1
)以对其进行优化以减少启动时间。在JDK 13上运行时,-Xverify:none
未指定,因为已弃用。
此版本中还进行了其他一些性能改进:
- 绑定大量配置属性所需的时间已大大减少
- 当Spring Boot
PersistenceUnit
通过扫描JPA实体完全准备一个时,由于它是冗余的,因此Hibernate自己的实体扫描已被禁用 - 自动配置中的注入点已经过改进,仅适用于必须创建bean的情况
- 现在仅在启用和公开端点的情况下(通过JMX或HTTP)创建与Actuator端点相关的Bean。
- 编解码器自动配置的条件已得到改善,以便在不再使用编解码器时不再对其进行配置
- Tomcat的MBean注册表默认情况下处于禁用状态,从而将Tomcat的内存占用量减少了约2MB
延迟初始化
现在可以通过该spring.main.lazy-initialization
属性启用全局延迟初始化以减少启动时间。请注意,使用该功能需要付费:
- 在进行任何延迟的初始化时,HTTP请求的处理可能需要更长的时间
- 启动时发生的故障不会后续不会再发生
单个bean可以通过使用注释其定义来选择退出延迟初始化@Lazy(false)
。如果无法@Lazy(false)
选择退出延迟初始化,LazyInitializationExcludeFilter
则可以使用Bean代替。例如,永远不要将IntegrationFlow
bean设置为惰性,可以使用以下代码:
@Bean
static LazyInitializationExcludeFilter integrationLazyInitExcludeFilter() {return LazyInitializationExcludeFilter.forBeanTypes(IntegrationFlow.class);
}
Spring Data Moore
Spring Boot 2.2随Spring Data Moore一起提供。请参阅Spring Data Moore博客中的新增功能以了解更多信息。
任务执行和计划的关机配置
自动配置TaskExecutor
和TaskScheduler
现在均可配置的关机行为,请参见spring.task.execution.shutdown
和spring.task.scheduling.shutdown
名称空间以获取更多详细信息。
Kubernetes检测
ConditionalOnCloudPlatform
现在可以检测应用程序是否在Kubernetes上运行。
集成测试中的测试应用程序参数
SpringBootTest
允许指定将触发创建ApplicationArguments
Bean的应用程序参数。
@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 Analyzer和https://fastthread.io都兼容的纯文本线程转储。
Configurable converters for Actuator endpoint input parameters
执行器的输入参数@Endpoint
可以使用定制@EndpointConverter
注释的转换器进行管理。
Redis缓存配置的回调
RedisCacheManager
最近对配置进行了改进,RedisCacheManagerBuilderCustomizer
bean使您可以在使用该生成器配置不可变对象之前获取该生成器的句柄RedisCacheManager
。
Qualifier for Spring Batch datasource
在具有多个数据源的环境中,DataSource
可以使用Bean@BatchDataSource
来表明它是Spring Batch使用的那个。
构建信息可重复输出
构建信息目标具有一个额外的time
属性,该属性允许配置build.time
处理方式。可以完全禁用它,也可以重复将其设置为固定时间以使输出build.properties
。
Hazelcast的健康指标
HealthIndicator 支持
Hazelcast。
空闲JDBC连接指标
现在可以通过跟踪size
和idle
指标来跟踪连接池的总大小。如果您有自定义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
,可以设置为never
,when-authorized
或always
。
例如,如果您想始终显示构成系统运行状况的各个运行状况指示器,但又不想显示其详细信息,则可以使用:
management.endpoint.health.show-components=alwaysmanagement.endpoint.health.show-details=never
也可以在运行状况指示器组上设置相同的属性。
Flyway JavaMigrations的自动配置
Flyway将被自动配置为使用JavaMigration
在应用程序上下文中找到的任何bean。
清除Actuator Endpoints的URI中的属性
configprops
和env
端点执行的清理操作已得到改进,以包括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。
Printer
和Parser
bean会自动在应用程序转换服务中注册。- 使用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配置现在可以使用
on
或off
用于布尔类型。 - 现在,
/
在使用单独的管理端口时,可以打开执行器发现页面。 @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的ForwardedHeaderFilter
:server.forward-headers-strategy=framework
。开发人员应使用最适合其用例的选项。ReactiveWebServerApplicationContext#getWebServerFactory
。agent
Maven插件的属性已重命名为agents
。- 不推荐使用Joda的时间,替代为
java.time
。 ApplicationHealthIndicatorPing支持HealthIndicator
。ConfigurationBeanFactoryMetadata支持ConfigurationPropertiesBean
。ConfigurationPropertiesBindingPostProcessor支持@EnableConfigurationProperties
或register
方法的构造函数。ConfigurationPropertiesBindingPostProcessor.VALIDATOR_BEAN_NAME
已移至EnableConfigurationProperties.VALIDATOR_BEAN_NAME
。ConfigurationPropertiesBindingPostProcessorRegistrar支持@EnableConfigurationProperties
。WebTestClientBuilderCustomizer
已移至org.springframework.boot.test.web.reactive.server
。