2.7~3.0的迁移指南
官方文档:Spring Boot 3.0 Migration Guide · spring-projects/spring-boot Wiki · GitHub
升级到最新2.7.x
版本
在开始升级之前,请确保升级到最新的可用2.7.x
版本。这将确保您针对该行的最新依赖项进行构建。
查看依赖关系
迁移到 Spring Boot 3 将升级许多依赖项,并且可能需要您进行一些工作。您可以使用依赖管理查看2.7.x依赖管理以3.0.x评估您的项目受到的影响。
您还可以使用不受 Spring Boot 管理的依赖项(例如 Spring Cloud)。由于您的项目为这些定义了一个明确的版本,因此您需要在升级之前首先确定兼容的版本。
Spring Security
Spring Boot 3.0 使用了 Spring Security 6.0。Spring Security 团队发布了 Spring Security 5.8 以简化向 Spring Security 6.0 的升级。在升级到 Spring Boot 3.0 之前,请考虑将您的 Spring Boot 2.7 应用程序升级到 Spring Security 5.8。Spring Security 团队已经制作了一份迁移指南,可以帮助您这样做。从那里,您可以在升级到 Spring Boot 3.0 时遵循5.8 到 6.0 迁移指南。
调度类型
在 Servlet 应用程序中,Spring Security 6.0 将授权应用于每个调度类型。为了与此 Spring Boot 保持一致,现在将 Spring Security 的过滤器配置为为每种分派类型调用。可以使用属性配置类型spring.security.filter.dispatcher-types
。
查看系统要求
Spring Boot 3.0 需要 Java 17 或更高版本。不再支持 Java 8。它还需要 Spring Framework 6.0。
查看 Spring Boot 2.x 的弃用
Spring Boot 2.x 中弃用的类、方法和属性已在此版本中删除。请确保您在升级之前没有调用已弃用的方法。
升级到 Spring Boot 3
检查项目及其依赖项的状态后,升级到 Spring Boot 3.0 的最新维护版本。
配置属性迁移
可查看上文提到的新的配置和值得注意的,很关键,配置更改日志
在 Spring Boot 3.0 中,一些配置属性被重命名/删除,开发人员需要相应地更新他们的application.properties
/ application.yml
。为了帮助您,Spring Boot 提供了一个spring-boot-properties-migrator
模块。一旦添加为项目的依赖项,这不仅会在启动时分析应用程序的环境并打印诊断信息,还会在运行时为您临时迁移属性。
您可以通过将以下内容添加到您的 Maven 来添加迁移器pom.xml
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>
或者,如果您使用 Gradle:
runtime("org.springframework.boot:spring-boot-properties-migrator")
Spring Framework 6.0
Spring Boot 3.0 构建在需要 Spring Framework 6.0 的基础上。在继续之前,您可能需要查看他们的升级指南。
Jakarta EE
每当 Spring Boot 依赖 Jakarta EE 规范时,Spring Boot 3.0 已升级到 Jakarta EE 10 中包含的版本。例如,Spring Boot 3.0 使用 Servlet 6.0 和 JPA 3.1 规范。
如果您正在管理自己的依赖项,而不依赖于我们的入门 POM,则应确保已适当更新 Maven 或 Gradle 文件。您需要特别注意旧的 Java EE 依赖项不再直接或可传递地用于您的构建中。例如,如果您应该始终使用jakarta.servlet:jakarta.servlet-api
而不是javax.servlet:javax.servlet-api
.
除了依赖坐标的变化,Jakarta EE 现在使用jakarta
包而不是javax
. 更新依赖项后,您可能会发现import
项目中的语句需要更新。
有许多工具可以帮助迁移,包括:
核心变化
对与大多数应用程序相关的 Spring Boot 核心进行了多项更改。
图像横幅支持已删除
已删除对基于图像的应用程序横幅的支持。banner.gif
、banner.jpg
和banner.png
文件现在将被忽略,应替换为基于文本的banner.txt
文件。
记录日期格式
Logback 和 Log4j2 日志消息的日期和时间组件的默认格式已更改以符合 ISO-8601 标准。新的默认格式yyyy-MM-dd’T’HH:mm:ss.SSSXXX
使用 aT
来分隔日期和时间而不是空格字符,并将时区偏移量添加到末尾。环境LOG_DATEFORMAT_PATTERN
变量或logging.pattern.dateformat
属性可用于恢复以前的默认值yyyy-MM-dd HH:mm:ss.SSS
。
类型级别不再需要@ConstructingBinding
@ConstructorBinding
在类的类型级别不再需要@ConfigurationProperties
,应该删除。当一个类或记录有多个构造函数时,它仍然可以用在构造函数上以指示应该使用哪个构造函数进行属性绑定。
YamlJsonParser 已被删除
YamlJsonParser
已被删除,因为 SnakeYAML 的 JSON 解析与其他解析器实现不一致。万一您YamlJsonParser
直接使用,请迁移到其他实现之一JsonParser
。
自动配置文件
Spring Boot 2.7引入了META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
一个用于注册自动配置的新文件,同时保持与spring.factories
. 在此版本中,已删除对在其中注册自动配置的支持,spring.factories
以支持导入文件。
Web 应用程序更改
如果您要升级 Web 应用程序,则应查看以下部分。
Spring MVC 和 WebFlux URL 匹配变化
从 Spring Framework 6.0 开始,尾部斜杠匹配配置选项已被弃用,其默认值设置为false
. 这意味着以前,以下控制器将同时匹配“GET /some/greeting”和“GET /some/greeting/”:
@RestController
public class MyController {
@GetMapping("/some/greeting")
public String greeting() {
return "Hello";
}
}
从这个 Spring Framework 更改开始,默认情况下“GET /some/greeting/”不再匹配,将导致 HTTP 404 错误。
开发人员应该改为通过代理、Servlet/web 过滤器配置显式重定向/重写,或者甚至在控制器处理程序上显式声明附加路由(例如@GetMapping("/some/greeting", "/some/greeting/")
针对更有针对性的情况。
在您的应用程序完全适应此更改之前,您可以使用以下全局 Spring MVC 配置更改默认设置:
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setUseTrailingSlashMatch(true);
}
}
或者,如果您使用的是 Spring WebFlux:
@Configuration
public class WebConfiguration implements WebFluxConfigurer {
@Override
public void configurePathMatching(PathMatchConfigurer configurer) {
configurer.setUseTrailingSlashMatch(true);
}
}
'server.max-http-header-size'
以前,server.max-http-header-size
在四个受支持的嵌入式 Web 服务器之间处理不一致。使用 Jetty、Netty 或 Undertow 时,它将配置最大 HTTP 请求标头大小。使用 Tomcat 时,它会配置最大 HTTP 请求和响应标头大小。
为了解决这种不一致,server.max-http-header-size
已弃用并server.max-http-request-header-size
引入了替代品 。这两个属性现在仅适用于请求标头大小,与底层 Web 服务器无关。
要在 Tomcat 或 Jetty(仅有的两个支持此类设置的服务器)上限制 HTTP 响应的最大标头大小,请使用WebServerFactoryCustomizer
.
更新了正常关机的阶段
SmartLifecycle
已更新实现正常关闭所使用的阶段。正常关机现在分阶段开始SmartLifecycle.DEFAULT_PHASE - 2048
,Web 服务器分阶段停止SmartLifecycle.DEFAULT_PHASE - 1024
。SmartLifecycle
参与正常关闭的任何实现都应相应更新。
码头
Jetty 还不支持 Servlet 6.0。要将 Jetty 与 Spring Boot 3.0 一起使用,您必须将 Servlet API 降级到 5.0。您可以使用该jakarta-servlet.version
属性来执行此操作。
RestTemplate 中的 Apache HttpClient
Spring Framework 6.0 中删除了对 Apache HttpClient 的支持,立即替换为org.apache.httpcomponents.client5:httpclient5
(注意:此依赖项具有不同的 groupId)。如果您注意到 HTTP 客户端行为存在问题,则可能是RestTemplate
回退到 JDK 客户端。org.apache.httpcomponents:httpclient
可以由其他依赖项传递,因此您的应用程序可能会依赖此依赖项而无需声明它。
JSP
org.apache.tomcat.embed:tomcat-embed-jasper
要在打包为可执行 war 文件并启动的应用程序中使用带有 Jasper() 的 JSP java -jar your-application.war
,jdk.util.jar.enableMultiRelease
系统属性必须设置为false
。例如:
$ java -Djdk.util.jar.enableMultiRelease=false -jar your-application.war
执行器变化
如果您使用 Spring Boot 的执行器模块,您应该了解以下更新。
JMX 端点暴露
默认情况下,现在只有健康端点通过 JMX 公开,以与默认的 Web 端点公开保持一致。management.endpoints.jmx.exposure.include
这可以通过配置和属性来更改management.endpoints.jmx.exposure.exclude
。
“httptrace”端点重命名为“httpexchanges”
端点httptrace
和相关基础设施记录并提供对最近 HTTP 请求-响应交换信息的访问。在引入对Micrometer Tracing的支持后,名称httptrace
可能会引起混淆。为了减少这种可能的混淆,端点已重命名为httpexchanges
. 端点响应的内容也受到此重命名的影响。有关详细信息,请参阅执行器 API 文档。
相关的基础设施类也已重命名。例如,HttpTraceRepository
现在已命名HttpExchangeRepository
并且可以在包中找到org.springframework.boot.actuate.web.exchanges
。
Actuator JSON
Spring Boot 附带的执行器端点的响应现在使用隔离ObjectMapper
实例来确保结果一致。如果您想恢复到旧行为并使用ObjectMapper
您可以设置management.endpoints.jackson.isolated-object-mapper
为的应用程序false
。
如果您开发了自己的端点,您可能希望确保响应实现接口OperationResponseBody
。ObjectMapper
这将确保在将响应序列化为 JSON 时考虑隔离。
执行器端点暴露
由于/env
和/configprops
端点可以包含敏感值,因此默认情况下始终屏蔽所有值。这曾经只适用于被认为是敏感的密钥。
相反,此版本选择了更安全的默认设置。基于键的方法已被删除,取而代之的是基于角色的方法,类似于健康端点详细信息。是否显示未过滤的值可以使用属性进行配置management.endpoint.env.show-values
,或者management.endpoint.configprops.show-values
可以具有以下值:
NEVER
- 所有值都经过清理(默认值)。ALWAYS
- 所有值都出现在输出中(将应用清理功能)。WHEN_AUTHORIZED
- 仅当用户获得授权时,值才会出现在输出中(将应用清理功能)。
对于 JMX,用户总是被认为是被授权的。对于 HTTP,如果用户通过身份验证并具有指定的角色,则认为他们已获得授权。
QuartzEndpoint 的清理也可以使用属性以相同的方式配置management.endpoint.quartz.show-values
。
QuartzEndpoint 的清理也可以使用属性以相同的方式配置management.endpoint.quartz.show-values
。
Micrometer and Metrics Changes
Spring Boot 3.0 建立在 Micrometer 1.10 之上。如果您的应用程序收集并导出指标,您应该了解以下变化。
弃用 Spring Boot 2.x 工具
由于与 Observation 支持集成,我们现在弃用以前的工具。执行实际检测的过滤器、拦截器已完全删除,因为无法解决整类错误,并且重复检测的风险太高。例如,WebMvcMetricsFilter
已被完全删除并被 Spring Framework 的ServerHttpObservationFilter
. 相应的*TagProvider
*TagContributor
和*Tags
类已被弃用。默认情况下,观察仪器不再使用它们。我们在弃用阶段保留它们,以便开发人员可以将他们现有的基础架构迁移到新的基础架构。
标签提供者和贡献者迁移
如果您的应用程序正在自定义指标,您可能会在代码库中看到新的弃用。在我们的新模型中,标签提供者和贡献者都被观察约定所取代。让我们以 Spring Boot 2.x 中的 Spring MVC“http.server.requests”指标检测支持为例。
如果您贡献额外的Tags
或TagContributor
只是部分覆盖 a ,您可能应该根据您的要求TagProvider
扩展:DefaultServerRequestObservationConvention
public class ExtendedServerRequestObservationConvention extends DefaultServerRequestObservationConvention {
@Override
public KeyValues getLowCardinalityKeyValues(ServerRequestObservationContext context) {
// here, we just want to have an additional KeyValue to the observation, keeping the default values
return super.getLowCardinalityKeyValues(context).and(custom(context));
}
protected KeyValue custom(ServerRequestObservationContext context) {
return KeyValue.of("custom.method", context.getCarrier().getMethod());
}
}
如果您要显着更改 metrics Tags
,您可能会WebMvcTagsProvider
用自定义实现替换 并将其作为 bean 提供。在这种情况下,您可能应该为您感兴趣的观察实施约定。在这里,我们将实施ServerRequestObservationConvention
- 它用于ServerRequestObservationContext
提取有关当前请求的信息。然后,您可以根据您的要求实施方法:
public class CustomServerRequestObservationConvention implements ServerRequestObservationContext {
@Override
public String getName() {
// will be used for the metric name
return "http.server.requests";
}
@Override
public String getContextualName(ServerRequestObservationContext context) {
// will be used for the trace name
return "http " + context.getCarrier().getMethod().toLowerCase();
}
@Override
public KeyValues getLowCardinalityKeyValues(ServerRequestObservationContext context) {
return KeyValues.of(method(context), status(context), exception(context));
}
@Override
public KeyValues getHighCardinalityKeyValues(ServerRequestObservationContext context) {
return KeyValues.of(httpUrl(context));
}
protected KeyValue method(ServerRequestObservationContext context) {
// You should reuse as much as possible the corresponding ObservationDocumentation for key names
return KeyValue.of(ServerHttpObservationDocumentation.LowCardinalityKeyNames.METHOD, context.getCarrier().getMethod());
}
//...
}
在这两种情况下,您都可以将它们作为 beans 贡献给应用程序上下文,它们将被自动配置拾取,有效地替换默认的。
@Configuration
public class CustomMvcObservationConfiguration {
@Bean
public ExtendedServerRequestObservationConvention extendedServerRequestObservationConvention() {
return new ExtendedServerRequestObservationConvention();
}
}
您还可以使用自定义的类似目标ObservationFilter
- 添加或删除观察的键值。过滤器不会取代默认约定,而是用作后处理组件。
public class ServerRequestObservationFilter implements ObservationFilter {
@Override
public Observation.Context map(Observation.Context context) {
if (context instanceof ServerRequestObservationContext serverContext) {
context.addLowCardinalityKeyValue(KeyValue.of("project", "spring"));
String customAttribute = (String) serverContext.getCarrier().getAttribute("customAttribute");
context.addLowCardinalityKeyValue(KeyValue.of("custom.attribute", customAttribute));
}
return context;
}
}
Micrometer 的 JvmInfoMetrics 的自动配置
千分尺JvmInfoMetrics
现在是自动配置的。JvmInfoMetrics
可以删除任何手动配置的bean 定义。
执行器指标导出属性
我们已经移动了控制执行器指标导出的属性。旧模式是management.metrics.export.<product>
,新模式是management.<product>.metrics.export
(例如:prometheus 属性从移动management.metrics.export.prometheus
到management.prometheus.metrics.export
)。如果您使用的是spring-boot-properties-migrator
,您将在启动时收到通知。
有关详细信息,请参阅问题 #30381。
mongodb健康检查
for HealthIndicator
MongoDB 现在支持 MongoDB 的稳定 API。查询buildInfo
已替换为isMaster
,响应现在包含maxWireVersion
而不是version
。如MongoDB 文档中所述,客户端可以使用它maxWireVersion
来帮助协商与 MongoDB 的兼容性。注意maxWireVersion
是整数。
数据访问更改
如果您的应用程序正在处理数据,则应检查以下更改。
对数据属性的更改
该spring.data
前缀已为 Spring Data 保留,前缀下的任何属性都暗示类路径上需要 Spring Data。
Cassandra 配置属性
Cassandra 的配置属性已从.spring.data.cassandra.``spring.cassandra.
Redis 属性
Redis 的配置属性已从移动到,因为 Redis 自动配置要求类路径中存在 Spring Data。spring.redis.``spring.data.redis.
flyway
Spring Boot 3.0 默认使用 Flyway 9.0。请参阅 Flyway发行说明和博客文章,了解这对您的应用程序有何影响。
FlywayConfigurationCustomizer`现在调用 beans 来自定义`FluentConfiguration`any`Callback`和`JavaMigration`beans 已添加到配置中。可能必须更新使用定制器定义`Callback`和beans 并添加回调和 Java 迁移的应用程序,以确保使用预期的回调和 Java 迁移。`JavaMigration
Hibernate 6.1
Spring Boot 3.0 默认使用 Hibernate 6.1。请参阅 Hibernate 6.0和6.1迁移指南以了解这对您的应用程序有何影响。
依赖管理和spring-boot-starter-data-jpa
启动程序已更新为使用新的org.hibernate.orm
组 ID 作为其 Hibernate 依赖项。
配置spring.jpa.hibernate.use-new-id-generator-mappings
属性已被删除,因为 Hibernate 不再支持切换回旧的 ID 生成器映射。
嵌入式MongoDB
Flapdoodle 嵌入式 MongoDB 的自动配置和依赖管理已被删除。如果您使用嵌入式 MongoDB 进行测试,请使用Flapdoodle 项目提供的自动配置库或修改测试以使用Testcontainers项目而不是嵌入式 MongoDB。
R2DBC 1.0
Spring Boot 3.0 默认使用 R2DBC 1.0。随着 1.0 版本的发布,R2DBC 不再发布影响 Spring Boot 依赖管理的物料清单 (bom)。不能r2dbc-bom.version
再用于覆盖 R2DBC 的版本。取而代之的是,现在可以使用几个单独和单独版本化模块的新属性:
oracle-r2dbc.version
(com.oracle.database.r2dbc:oracle-r2dbc
)r2dbc-h2.version
(io.r2dc:r2dbc-h2
)r2dbc-pool.version
(io.r2dc:r2dbc-pool
)r2dbc-postgres.version
(io.r2dc:r2dbc-postgres
)r2dbc-proxy.version
(io.r2dc:r2dbc-proxy
)r2dbc-spi.version
(io.r2dc:r2dbc-spi
)
Elasticsearch 客户端和模板
已删除对 Elasticsearch 高级 REST 客户端的支持。取而代之的是,引入了 Elasticsearch 的新 Java 客户端的自动配置。同样,对构建在高级 REST 客户端之上的 Spring Data Elasticsearch 模板的支持已被删除。取而代之的是,引入了基于新 Java 客户端构建的新模板的自动配置。有关详细信息,请参阅参考文档的 Elasticsearch 部分。
ReactiveElasticsearchRestClientAutoConfiguration
已重命名为ReactiveElasticsearchClientAutoConfiguration
并从org.springframework.boot.autoconfigure.data.elasticsearch
移至org.springframework.boot.autoconfigure.elasticsearch
。应相应地更新任何自动配置排除或排序。
MySQL JDBC 驱动程序
MySQL JDBC 驱动程序的坐标已从 更改mysql:mysql-connector-java
为com.mysql:mysql-connector-j
。如果您使用的是 MySQL JDBC 驱动程序,请在升级到 Spring Boot 3.0 时相应地更新其坐标。
Spring Security 改变
Spring Boot 3.0 升级到 Spring Security 6.0。除了以下部分之外,请查看Spring Security 6.0 迁移指南。
ReactiveUserDetails服务
在存在 . 的情况下ReactiveUserDetailsService
不再自动配置A。AuthenticationManagerResolver
如果您的应用程序依赖于ReactiveUserDetailService
尽管存在AuthenticationManagerResolver
,请定义您自己的ReactiveUserDetailsService
bean 来满足它的需要。
SAML2 依赖方配置
对以下属性的支持spring.security.saml2.relyingparty.registration.{id}.identity-provider
已被删除。使用下面的新属性spring.security.saml2.relyingparty.registration.{id}.asserting-party
作为替代。
Spring Batch更改
Spring Boot 3.0 升级到 Spring Batch 5.0。除了以下部分之外,请查看Spring Batch 5.0 迁移指南。
@EnableBatchProcessing 现在不鼓励
以前,@EnableBatchProcessing
可用于启用 Spring Boot 的 Spring Batch 自动配置。它不再需要,应该从想要使用 Boot 的自动配置的应用程序中删除。现在可以定义使用 Batch 注释@EnableBatchProcessing
或扩展 Batch 的 beanDefaultBatchConfiguration
来告诉自动配置后退,从而允许应用程序完全控制 Batch 的配置方式。
多个批处理作业
不再支持运行多个批处理作业。如果自动配置检测到单个作业,它将在启动时执行。如果在上下文中找到多个作业,则必须由用户使用该属性提供要在启动时执行的作业名称spring.batch.job.name
。
Spring Session变化
以下部分将与 Spring Session 用户相关。
Spring Session store-type
spring.session.store-type
不再支持通过显式配置 Spring 会话的存储类型。如果在类路径上检测到多个会话存储存储库实现,将使用固定顺序SessionRepository
来确定应自动配置哪些。如果 Spring Boot 定义的顺序不能满足您的需求,您可以定义自己的 SessionRepository bean 并导致自动配置退出。
Gradle变化
使用 Gradle 构建 Spring Boot 项目的用户应查看以下部分。
使用 Gradle 简化主类名称解析
使用 Gradle 构建应用程序时,应用程序主类名称的解析已得到简化并保持一致。 bootJar
, bootRun
,bootWar
现在都通过在主源集的输出中查找来解析主类名的名称。这消除了一个小风险,即默认情况下任务可能没有使用相同的主类名称。如果您依赖从主源集输出之外的位置解析的主类,请更新您的 Gradle 配置以使用DSLmainClass
的属性配置主类名称springBoot
:
springBoot {
mainClass = "com.example.Application"
}
或者,您可以将任务classpath
的属性配置resolveMainClassName
为在主源集输出目录以外的位置进行搜索。
配置 Gradle 任务
Spring Boot 的 Gradle 任务已更新为始终使用 GradleProperty
对其配置的支持。因此,您可能需要更改引用属性值的方式。例如,现在可以使用 访问imageName
属性 on的值。此外,如果您使用的是 Kotlin DSL,您可能需要更改设置属性的方式。例如,在 Spring Boot 2.x 中,可以按如下方式禁用任务分层:bootBuildImage``imageName.get()``bootJar
tasks.named<BootJar>("bootJar") {
layered {
isEnabled = false
}
}
在 3.0 中,必须使用以下内容:
tasks.named<BootJar>("bootJar") {
layered {
enabled.set(false)
}
}
请参阅Gradle 插件的参考文档以获取更多示例。
使用 Gradle 从“build-info.properties”中排除属性
作为前面描述的配置 Gradle 任务更改的一部分,从生成的文件中排除属性的机制build-info.properties
也发生了变化。以前,可以通过将属性设置为 来排除属性null
。这不再有效,并已被基于名称的机制所取代:
springBoot {
buildInfo {
excludes = ['time']
}
}
Gradle Kotlin DSL 中的等价物如下:
springBoot {
buildInfo {
excludes.set(setOf("time"))
}
}
Maven 的变化
使用 Maven 构建 Spring Boot 项目的用户应查看以下部分。
在 Maven 进程中运行您的应用程序
在 Spring Boot 2.7 中弃用的和fork
的属性已被删除。spring-boot:run``spring-boot:start
Git 提交 ID Maven 插件
Git Commit ID Maven 插件已更新到版本 5,其坐标已更改。之前的坐标是pl.project13.maven:git-commit-id-plugin
. 新坐标是io.github.git-commit-id:git-commit-id-maven-plugin
. <plugin>
您文件中的任何声明pom.xml
都应相应更新。
依赖管理变化
对 Spring Boot 管理的依赖项进行了以下更改。
JSON-B
Apache Johnzon 的依赖管理已被移除以支持 Eclipse Yasson。Jakarta EE 10 兼容版本的 Apache Johnzon 可以与 Spring Boot 3 一起使用,但您现在必须在依赖声明中指定一个版本。
ANTLR 2(蚂蚁金服2)
ANTLR 2 ( antlr:antlr
) 的依赖管理已被删除,因为它不再需要。如果您在应用程序中使用 ANTLR 2,请指定满足您需要的版本。
RxJava
删除了 RxJava 1.x 和 2.x 的依赖管理,并添加了 RxJava 3 的依赖管理。
Hazelcast 休眠已删除
Spring Boot 不依赖于 Hazelcast Hibernate,因此它不需要对其版本有意见。因此,Hazelcast Hibernate 的依赖管理已被删除。如果您希望继续使用 Hazelcast Hibernate,请指定满足您需要的版本。或者,考虑org.hibernate.orm:hibernate-jcache
改为使用。
缓存3
为了支持 Jakarta EE 9 及更高版本,Ehcacheehcache
和ehcache-transactions
模块的依赖管理现在使用jakarta
分类器声明。pom.xml
您或脚本中的依赖声明build.gradle
也应该进行类似的更新。
其他搬迁
Spring Boot 3.0 中删除了对以下依赖项的支持:
- Apache ActiveMQ
- Atomikos
- EhCache 2
- Hazelcast 3
已删除对 Apache Solr 的支持,因为其基于 Jetty 的客户端Http2SolrClient
与 Jetty 11 不兼容。