大家好,我是烤鸭:
最近在把低版本的springboot项目升级,正好翻译了下springboot 2.1-2.3 版本的更新日志。
Github 原文:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.3-Release-Notes
2.1 版本变化:https://blog.csdn.net/Angry_Mills/article/details/113113486
2.2 版本变化:https://blog.csdn.net/Angry_Mills/article/details/113116126
推荐版本: 2.3.7.RELEASE
从Spring Boot 2.2升级
更改最低要求
Spring Boot现在需要:
- Gradle 6.3+(如果使用Gradle进行构建)。还支持5.6.x,但已弃用。
- Jetty 9.4.22+(如果您使用Jetty作为嵌入式容器)
验证启动器不再包含在Web启动器中
从#19550开始,默认情况下,Web和WebFlux启动器不再依赖于验证启动器。例如,如果您的应用程序使用验证功能,则发现javax.validation.*
导入没有得到解决,则需要自己添加启动器。
对于Maven构建,可以执行以下操作:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>
对于Gradle,您将需要添加以下内容:
dependencies {...implementation 'org.springframework.boot:spring-boot-starter-validation'
}
Spring Data Neumann
Spring Boot 2.3附带了Spring Data的主要版本。如果您使用的是Cassandra,Couchbase,Elasticsearch,MongoDB或JDBC,则需要额外的注意。
Cassandra
此版本切换到Cassandra v4,该版本带来了许多向后不兼容的更改。如果您依靠ClusterBuilderCustomizer
来定制Cluster
,则此概念在v4中不再存在,已被两个更具体的定制器取代:
DriverConfigLoaderBuilderCustomizer
自定义驱动程序的属性。请将此属性用于尚未暴露的任何财产。CqlSessionBuilderCustomizer
自定义CqlSession
(原Session
)。
Cassandra v4驱动程序不再具有从接触点自动进行本地DC推断的功能。因此,必须使用默认的负载平衡策略设置“本地数据中心”属性,并且联系点必须位于该数据中心。spring.data.cassandra.local-datacenter
添加了新属性来设置本地数据中心。
Couchbase
此版本切换到Couchbase SDK v3,该版本带来了许多向后不兼容的更改。
- 要连接到集群,您现在应该使用
spring.couchbase.connection-string
而不是前者spring.couchbase.bootstrap-hosts
。 - 基于角色的访问控制现在已经得到了概括。
- Spring Boot不再自动配置
Bucket
但是您可以使用Cluster
API轻松进行配置。 - Endpoints IO 配置在
spring.couchbase.env.io
。 - 如果要扩展
CouchbaseConfiguration
自定义环境,请ClusterEnvironmentBuilderCustomizer
以一种更惯用的方式使用。
如果您将Couchbase与Spring Data结合使用,则需要提供存储Bucket
名称。
Elasticsearch
不推荐使用的本机Elasticsearch传输已被删除,因为Elasticsearch和Spring Data本身在其下一发行版中均不支持它。在此发行版中也删除了对Jest库的支持。
Spring Boot现在默认使用Elasticsearch 7.5+。
MongoDB
此版本切换到MongoDB 4,并协调反应式(reactive)和命令式驱动程序。如果您使用的是入门程序,那么这对您应该是非常透明的。
通过这种协调,如果您使用,将不再提供非反应性基础结构spring-boot-starter-data-mongodb-reactive
。如果您需要在启动时使用命令式基础架构(例如MongoOperations
),请考虑添加spring-boot-starter-data-mongodb
。
Neo4j
Neo4j的视图拦截器中的打开会话现在默认为禁用。如果需要再次启用它,请使用standardspring.data.neo4j.open-in-view
属性。
Neo4j运行状况指示器的详细信息现在包含version
和edition
的服务器,如以下示例所示:
neo4j: {status: "UP",details: {edition: "community",version: "4.0.0"}
}
JDBC
在其新功能中,Spring Data JDBC 2.0现在默认情况下引用标识符。这种行为可以通过调用被禁用setForceQuote(false)
的RelationalMappingContext
。
Micrometer
此版本升级到Micrometer 1.5,带来许多弃用:
- 服务级别协议已重命名为“服务级别目标”,并且边界用
double
而不是表示long
。 - Wavefront指标现在通过导出
WavefrontSender
。读取和连接超时属性废弃。
Jackson
此版本升级到Jackson 2.11,其中包括对java.util.Date
和的默认格式的更改java.util.Calendar
。有关详细信息,请参见FasterXML / jackson-databind#2643。
Spring Cloud Connectors启动器已删除
在2.2中不推荐使用Spring Cloud Connectors入门程序,而推荐使用Java CFEnv。该启动程序已被删除,并且Spring Boot的托管依赖项中不再包含Spring Cloud Connectors依赖项。
嵌入式Servlet Web服务器线程配置
用于配置嵌入式Servlet Web服务器(Jetty,Tomcat和Undertow)使用的线程的配置属性已移至专用threads
组。属性现在可以发现server.jetty.threads
,server.tomcat.threads
和server.undertow.threads
。旧属性保留为不推荐使用的形式,以简化迁移。
更改默认错误页面的内容
默认情况下,错误消息和任何绑定错误不再包含在默认错误页面中。这降低了将信息泄露给客户端的风险。 server.error.include-message
并且server.error.include-binding-errors
可以分别用于控制消息的包含和绑定错误。支持的值是always
,on-param
和never
。
磁盘空间运行状况指示器
自动配置的磁盘空间运行状况指示器不再需要在应用程序启动时被监视的路径。一条不存在的路径将被检测为具有零可用空间,从而导致指示器的响应下降。
自动创建 developmentOnly
Gradle配置
该developmentOnly
配置主要用于声明对Spring Boot的DevTools的依赖性时,现在由Spring Boot的Gradle插件自动创建。developmentOnly
可以从Gradle构建脚本中删除任何手动配置。
删除Maven网站插件管理
Spring Boot的构建不再使用站点插件(maven-site-plugin
),并且其插件管理已删除。如果您依赖于Spring Boot的托管版本,则应该添加自己的插件管理。
删除Maven Exec插件自定义配置
如果您从继承spring-boot-starter-parent
,它将不再配置Maven的exec插件(exec-maven-plugin
)来使用来设置主类start-class
。如果您依赖于此,则可以按以下方式恢复该行为:
<plugin><groupId>org.codehaus.mojo</groupId><artifactId>exec-maven-plugin</artifactId><configuration><mainClass>${start-class}</mainClass></configuration>
</plugin>
默认情况下,ApplicationContextRunner禁用Bean覆盖
为了与保持一致SpringApplication
,ApplicationContextRunner
现在默认情况下禁用Bean覆盖。如果您需要使用bean覆盖进行测试,withAllowBeanDefinitionOverriding
则可以启用它。
使用激活多个配置文件 @ActiveProfiles
现在,@ActiveProfiles
注释支持包含逗号的配置文件名称。这意味着像这样的注释@ActiveProfiles("p1,p2")
会将提供的值p1,p2
视为单个配置文件名称。要激活多个配置文件,请像中提供每个配置文件名称作为单独的值@ActiveProfiles({"p1","p2"})
。
WebServerInitializedEvent和ContextRefreshedEvent
作为引入对平稳关闭的支持的一部分,Web服务器初始化现在在应用程序上下文刷新处理结束时执行,而不是在刷新处理完成后立即执行。因此,WebServerInitializedEvent
现已在之前发布ContextRefreshedEvent
。
从Spring Boot 2.2弃用
在此发行版中删除了Spring Boot 2.2中不推荐使用的大多数类,方法和属性。请确保升级之前不调用不推荐使用的方法。
配置属性
许多属性已被重命名或弃用。您可以使用该spring-boot-properties-migrator
模块来识别那些属性。一旦添加为项目的依赖项,它不仅会分析应用程序的环境并在启动时显示诊断信息,还会在运行时为您临时迁移属性。
<plugin><groupId>org.codehaus.mojo</groupId><artifactId>exec-maven-plugin</artifactId><configuration><mainClass>${start-class}</mainClass></configuration>
</plugin>
Note | Once you’re done with the migration, please make sure to remove this module from your project’s dependencies. |
---|---|
Java 14支持
Spring Boot 2.3增加了对Java 14的支持。还支持Java 8和11。
使用Cloud Native Buildpack构建OCI镜像
支持使用Cloud Native Buildpacks构建Docker镜像,并已通过spring-boot:build-image
goal和bootBuildImage
task添加到Maven和Gradle插件中。默认情况下使用 Paketo Java buildpack创建镜像。
构建分层的jar以包含在Docker镜像中
Maven和Gradle插件已添加了对将jar文件的内容分层的支持。分层根据jar包的内容更改频率将其分隔。这种分离允许构建更有效的Docker镜像。可以重用未更改的现有图层,并将已更改的图层放置在顶部。
根据您的应用程序,您可能需要调整图层的创建方式和添加新图层的方式。这可以通过使用配置来完成,该配置描述了如何将jar分为几层,以及这些层的顺序。
创建分层jar时,spring-boot-jarmode-layertools
默认情况下会将jar作为依赖项添加到jar中(可以通过构建配置禁用该jar)。将此jar放在类路径上,您可以在特殊模式下启动应用程序,该模式允许引导代码运行与应用程序完全不同的内容,例如,提取层的内容。要查看可用的选项,请使用-Djarmode=layertools
以下示例启动一个 jar:
$ java -Djarmode=layertools -jar my-app.jar
Usage:java -Djarmode=layertools -jar my-app.jarAvailable commands:list List layers from the jar that can be extracted #列出jar中可以提取的层extract Extracts layers from the jar for image creation #从jar中提取层以创建图像help Help about any command
jar解压缩时的可预测的类路径顺序
使用Maven和Gradle构建的jar现在包含索引文件。当jar解压时,此索引文件用于确保类路径的顺序与直接执行jar时的顺序相同。
支持配置文件的通配符位置
加载配置文件时,Spring Boot现在支持通配符位置。默认情况下,config/*/
jar外部的通配符位置受支持。当有多个配置属性源时,这在Kubernetes等环境中很有用。例如,如果您有单独的mysql和redis配置,则将它们放在/config
,即/config/mysql/application.properties
和中可以自动选择它们/config/redis/application.properties
。
正常关机
所有四个嵌入式Web服务器(Jetty,Reactor Netty,Tomcat和Undertow)以及响应式和基于Servlet的Web应用程序均支持正常关机。使用启用后server.shutdown=graceful
,关闭后,Web服务器将不再允许新请求,并且将等待宽限期以完成活动请求。宽限期可以使用进行配置spring.lifecycle.timeout-per-shutdown-phase
。请参阅参考文档以获取更多详细信息。
Liveness and Readiness探针
Spring Boot现在具有有关应用程序可用性的内置知识,可以跟踪应用程序是否处于活动状态以及是否已准备好处理流量。可以将运行状况端点配置为通过配置属性公开应用程序的活动性(/actuator/health/liveness
)和就绪状态(/actuator/health/readiness
)management.health.probes.enabled=true
。在Kubernetes上运行时,这是自动完成的。
要了解有关此功能的更多信息,请查看此博客文章及其链接的参考文档。
Spring Data Neumann
Spring Boot 2.3附带了一个主要的Spring Data版本。请参阅Spring Data Neumann 了解更多信息。
R2DBC支持
当r2dbc在类路径上时,ConnectionFactory
将以与jdbc类似的方式自动配置a DataSource
。如果Spring Data在类路径上,则存储库也将像往常一样自动配置。
R2DBC支持还添加了连接工厂的运行状况指示器,ConnectionPool metrics
和测试部分 @DataR2dbcTest
。
WebFlux应用程序的可配置基本路径
现在可以配置WebFlux应用程序的所有Web处理程序的基本路径。使用该spring.webflux.base-path
属性来执行此操作。
Web应用程序中的日期时间转换
现在可以通过应用程序属性配置Web应用程序中的时间和日期时间值的转换。这补充了对格式化日期值的现有支持。对于MVC,属性分别为spring.mvc.format.time
和spring.mvc.format.date-time
。对于WebFlux,属性分别是spring.webflux.format.time
和spring.webflux.format.date-time
。
除了采用典型的格式设置模式外,用于配置日期,时间和日期时间格式的属性现在还支持值iso
。设置后,将应用相应的ISO-8601格式。
iso
下列属性支持这些值:
spring.mvc.format.date
spring.mvc.format.date-time
spring.mvc.format.time
spring.webflux.format.date
spring.webflux.format.date-time
spring.webflux.format.time
Actuator 改进
配置属性的端到端可追溯性
从#17886开始,/actuator/configprops
端点提供有关配置属性的端到端信息,以使其行为与环境端点保持一致。例如,在添加在application.properties添加server.server-header=Spring Boot
,端点将显示以下内容:
"serverHeader": {"origin": "class path resource [application.properties]:2:22","value": "Spring Boot"
},
metrics endpoint 中的名称按字母顺序排列
/actuator/metrics/
现在可以按字母顺序对处可用的度量标准名称进行排序,这使查找所需内容变得更加容易。
Query-less datasource 健康指示器
在没有验证查询的情况下,数据源HealthIndicator
现在以无查询模式运行,java.sql.Connection#isValid
用于验证连接。
为Web MVC和WebFlux指标提供其他标签
除了默认为MVC和WebFlux提供的标记外,现在还可以提供这些标记。可以使用WebMvcTagsContributor
@Bean
MVC和WebFluxTagsContributor
@Bean
WebFlux进行贡献。
自动配置Wavefront的发送器
Wavefront的自动配置已更新,可以定义一个WavefrontSender
bean。这允许通过单个连接将指标和跟踪发布到Wavefront。
Kafka原生指标
Kafka指标是为自动配置ConsumerFactory
和创建的消费者和生产者本地发布的ProducerFactory
。要为由自定义工厂创建的组件生成度量标准,应添加一个侦听器,如以下示例所示:
factory.addListener(new MicrometerConsumerListener<>(meterRegistry));
注意 | 如果仅出于收集Kafka指标的目的而启用JMX支持,则不再需要此功能。 |
---|---|
RSocket对Spring集成的支持
Spring Boot现在为Spring Integration的RSocket支持提供自动配置。
如果spring-integration-rsocket
可用,开发人员可以使用"spring.rsocket.server.*"
属性配置RSocket服务器,并使其使用IntegrationRSocketEndpoint
或RSocketOutboundGateway
组件来处理传入的RSocket消息。
绑定到 Period
如果属性需要表达一段时间,则可以使用java.time.Period
属性来表达。与持续时间支持类似,它支持一种简单的格式(即10周10周)以及元数据支持。
Web服务切片测试
@WebServiceClientTest
添加了新的批注以支持Web服务的“切片”测试。
依赖升级
Spring Boot 2.3移至几个Spring项目的新版本:
- Spring Data Neumann
- Spring HATEOAS 1.1
- Spring Integration 5.3
- Spring Kafka 2.5
- Spring Security 5.3
- Spring Session Dragonfruit
请注意,Spring Boot 2.3与Spring Boot 2.2建立在相同的Spring Framework和Reactor生成之上。
许多第三方依赖项也已更新,其中一些更值得注意的是:
- Artemis 2.12
- AssertJ 3.16
- Cassandra Driver 4.6
- Couchbase Client 3.0
- Elasticsearch 7.6
- Flyway 6.4
- Hibernate Validator 6.1
- Infinispan 10.1
- Jackson 2.11
- JUnit Jupiter 5.6
- Kafka 2.5
- Kotlin 1.3.72
- Lettuce 5.3
- Micrometer 1.5
- Mockito 3.3
- MongoDB 4.0
- QueryDSL 4.3
其他改进
除了上面列出的更改之外,还进行了许多小的调整和改进,包括:
- 我们在JPA支持中更新了默认配置,以改善测试体验,请参阅#16230和#16747。
spring-boot-autoconfigure-processor
现在,来自的输出是可重复的,从而使其与Gradle的构建缓存更好地配合工作。- Couchbase的类型密钥可以通过进行配置
spring.data.couchbase.type-key
。 - OAuth2参数绑定现在可用于
@WebMvcTest
。 - 可以使用配置Jetty的后备队列
server.jetty.max-queue-capacity
。 - 可以使用来配置Liquibase的标签支持
spring.liquibase.tag
。现在可以通过该spring.liquibase.clear-checksums
属性清除当前变更日志中的所有校验和。 - Gradle元数据现已发布。
DataSourceBuilder
可以用来配置SimpleDriverDataSource
。DataSource
指标现在有描述。- 云平台的自动检测可以使用
spring.main.cloud-platform 来覆盖
。 - 当请求具有认证时,现在支持缓存来自启动器的HTTP端点的响应。
- 现在,Maven支持创建jar 中的
project.build.outputTimestamp
属性,从而使其输出可重现。 - Maven插件的Javadoc现在已发布。
- 提供了一个定制器接口rsocketmessagehandlercustimizer,用于定制自动配置的RSocketMessageHandler。
- 提供了一个定制程序界面,
DefaultCookieSerializerCustomizer
用于定制自动配置的DefaultCookieSerializer
。 - 现在可以通过设置
server.servlet.register-default-servlet
为来禁用默认servlet的自动配置false
。 @ConditionalOnWarDeployment
添加了新条件。它可用于检测何时将应用程序作为war部署到Servlet容器或应用程序服务器。- 属性迁移器处理所有不赞成使用的属性,不仅包括那些具有错误级别的属性。
- 销毁war的ServletContext时,将注销JDBC驱动程序。
- 可以使用来配置Redis的哨兵密码
spring.redis.sentinel.password
。
Spring Boot 2.3中的弃用
spring.http
已经被转移到,server.servlet.encoding.
,spring.mvc.
andspring.codec.,见#18827
SpringApplication#refresh(ApplicationContext)
已不推荐使用SpringApplication#refresh(ConfigurableApplicationContext)
。- 在
ON_TRACE_PARAM
与所使用的server.error.include-stacktrace 属性
已被重命名为ON_PARAM
。 不推荐使用org.springframework.boot.autoconfigure.elasticsearch.rest.RestClientBuilderCustomizer
替代为org.springframework.boot.autoconfigure.elasticsearch.RestClientBuilderCustomizer