

Spring Boot 3.4.0 发行:革新与突破的里程碑
Spring Boot 3.4.0 于2024-11-21正式发布:

引言
本次Spring Boot 3.4.0 的发布带来了一系列令人期待和关注的重要特性,显著提升了开发体验与应用性能,本次带来的更新核心的几点如下:
一、日志与配置优化
- 结构化日志记录:支持多种格式如 ECS、GELF 和 Logstash,通过
logging.structured.format.file与logging.structured.format.console属性便捷开启,使日志规整有序,便于分析处理,极大助力于分布式系统的监控与问题排查。 - 配置元数据升级:注释处理器可检测
Enum默认值,减少手动元数据配置,让配置过程更加智能高效,降低出错概率。
二、功能组件增强
- Spring Pulsar 拓展:可配置默认租户和命名空间,新增
PulsarContainerFactoryCustomizer等接口自定义容器工厂,还能对客户端并发等进行精细调控,如设置spring.pulsar.client.threads.io与spring.pulsar.client.threads.listener,使 Pulsar 在应用中集成更灵活强大。 - Couchbase 身份验证多元化:除基本用户名密码方式,新增客户端证书认证,满足更高安全需求场景,为数据安全保驾护航。
- FreeMarker 变量自定义:能通过
FreeMarkerVariablesCustomizerbean 灵活定制自动配置的 FreeMarker 的Configuration对象使用的变量,增强模板引擎的个性化适配能力。
三、测试与可观察性提升
- 测试框架改进:
- AssertJ 对 MockMvc 支持,自动配置
MockMvcTester,以流畅 API 定义请求和断言,注入MockMvc处即可使用,优化测试代码编写体验。 - 测试容器方面,支持
org.testcontainers.kafka.KafkaContainer、Redis Stack 相关容器以及org.testcontainers.grafana.LgtmStackContainer等,拓宽测试覆盖范围。
- AssertJ 对 MockMvc 支持,自动配置
- 可观察性飞跃:
- 应用程序分组功能,
spring.application.group属性实现应用归类,在日志和 OpenTelemetryResource中体现,方便管理与监控资源。 - OTLP 功能拓展,支持 gRPC 传输发送跨度,
management.otlp.logs下属性助力日志导出配置,ProcessInfoContributor展示内存信息并新增跟踪导出控制属性,全方位提升可观察性数据管理的精细度。
- 应用程序分组功能,
四、Actuator 功能升级
- 可插拔暴露器:可扩展 Spring Boot 以灵活方式暴露 Actuator 端点,借助
EndpointExposureOutcomeContributor接口实现,便于与不同平台集成,如类似 Cloud Foundry 支持的拓展。 - SSL 信息与健康检查:
/actuator/info下新增 SSL 信息端点,展示有效期等内容并可预警证书过期,同时新增健康检查监控 SSL 证书状态,保障通信安全。 - 任务端点信息丰富:
/actuator/scheduledtasks端点公开更多元数据,如下次计划执行时间和上次执行详情,便于深入了解任务执行状况。
从Spring Boot 3.3升级
RestClient和RestTemplate
已添加对自动配置RestClient和RestTemplate以使用Reactor Netty的HttpClient或JDK的HttpClient的支持。按照优先顺序,现在支持的客户端如下:
- Apache HTTP Components(
HttpComponentsClientHttpRequestFactory) - Jetty Client(
JettyClientHttpRequestFactory) - Reactor Netty
HttpClient(ReactorClientHttpRequestFactory) - JDK
HttpClient(JdkClientHttpRequestFactory) - 简单JDK
HttpURLConnection(SimpleClientHttpRequestFactory)
值得注意的是,如果类路径上没有HTTP客户端库,这可能会导致使用JdkClientHttpRequestFactory,而以前会使用SimpleClientHttpRequestFactory。可以通过设置spring.http.client.factory选择特定的客户端。支持的值为http-components、jetty、reactor、jdk和simple。
所有五个客户端默认都会跟随重定向。要禁用此行为,请将spring.http.client.redirects设置为dont-follow。
Apache HTTP Components和Envoy
Apache HTTP Components在与HTTP/1.1 TLS升级相关的HttpClient中更改了默认值。大多数代理服务器可以毫无问题地处理升级,但是,您可能会在使用Envoy或Istio时遇到问题。
如果需要恢复以前的行为,可以使用新的ClientHttpRequestFactoryBuilder。定义一个HttpComponentsClientHttpRequestFactoryBuilder并应用以下自定义:
@Bean
public HttpComponentsClientHttpRequestFactoryBuilder httpComponentsClientHttpRequestFactoryBuilder() {
return ClientHttpRequestFactoryBuilder.httpComponents()
.withDefaultRequestConfigManagerCustomizer((builder) -> builder.setProtocolUpgradeEnabled(false));
}
配置属性的Bean验证
以前,当使用Hibernate Validator等Bean验证实现验证带有@Validated注释的@ConfigurationProperties类时,无论是否使用@Valid,都会在绑定嵌套属性时执行验证。在Spring Boot 3.4中,验证现在遵循Bean验证规范的行为。验证从带有@ConfigurationProperties注释的类开始,并且仅在相应字段带有@Valid注释时才级联到嵌套属性。
升级时,请检查带有Bean验证约束的@ConfigurationProperties类。在需要验证级联到嵌套属性的地方添加@Valid。
基于Bean的条件
在@Bean方法上使用@ConditionalOnBean和@ConditionalOnMissingBean并且设置了annotation属性时,其行为已更改。和以前一样,这两个条件都将使用@Bean方法的返回类型作为要匹配的类型的默认值。以前,如果设置了name、type或value,则不使用此默认值。从Spring Boot 3.4开始,如果设置了annotation,也不会使用此默认值。要恢复以前的行为,请同时指定value(即@Bean方法的返回类型)和annotation。
优雅停机
嵌入式Web服务器(Jetty、Reactor Netty、Tomcat或Undertow)的优雅停机现在默认启用。如果需要恢复以前的行为,请将server.shutdown设置为immediate。
用于构建OCI镜像的Paketo tiny Builder
使用Maven spring-boot:build-image目标或Gradle bootBuildImage任务为JVM应用程序构建OCI镜像时,默认使用的Cloud Native Buildpacks构建器已从paketobuildpacks/builder-jammy-base更改为paketobuildpacks/builder-jammy-java-tiny。这应该会生成更小的镜像。tiny构建器不包括外壳,因此对于需要启动脚本来运行应用程序的应用程序可能不起作用。有关自定义构建器的信息,请参阅Maven或Gradle文档。
带有Testcontainers的动态属性
通过注入DynamicPropertyRegistry定义动态属性的支持已被弃用,并且现在默认情况下尝试这样做会失败。不要注入DynamicPropertyRegistry,而是实现一个单独的返回DynamicPropertyRegistrar的@Bean方法。这个单独的bean方法应该注入将从中获取属性值的容器。这解决了一些容器生命周期问题,并确保在使用属性之前,从中获取属性值的容器已经启动。
如果希望继续注入DynamicPropertyRegistry(冒着遇到上述生命周期问题的风险),请将spring.testcontainers.dynamic-property-registry-injection设置为warn或allow。前者将记录警告,同时允许使用注入的DynamicPropertyRegistry。后者将默默地允许使用注入的DynamicPropertyRegistry,完全恢复Spring Boot 3.3的行为。
@AutoConfigureTestDatabase与容器
@AutoConfigureTestDatabase注释现在尝试检测数据库是否来自容器。如果要将该注释与容器数据库一起使用,这应该消除添加replace=Replace.NONE的需要。
如果需要恢复旧行为,请在注释上设置replace=Replace.AUTO_CONFIGURED。
控制对Actuator端点的访问
启用和禁用端点的支持已被重新设计,用更细粒度的访问模型取代了之前提供的开/关支持。新模型除了支持禁用端点(访问权限为none)和完全启用端点(访问权限为unrestricted)之外,还支持仅允许对端点操作进行read-only访问。
以下属性已被弃用:
management.endpoints.enabled-by-defaultmanagement.endpoint.<id>.enabled
它们的替代品是:
management.endpoints.access.defaultmanagement.endpoint.<id>.access
同样,@Endpoint上的enableByDefault属性已被弃用,新的defaultAccess属性取代了它。
作为这些更改的一部分,enabled-by-default现在始终如一地应用,并且与@ConditionalOnEnabledEndpoint的使用无关。如果在升级时失去对端点的访问权限,请将management.endpoint.<id>.access设置为read-only或unrestricted,或者将management.endpoint.<id>.enabled设置为true以使端点再次可访问。
此外,引入了一个新属性,允许操作员控制对Actuator端点的允许访问级别:
management.endpoints.access.max-permitted
此属性限制了可能为端点配置的任何访问权限。例如,如果management.endpoints.access.max-permitted设置为read-only,而management.endpoint.loggers.access设置为unrestricted,则仅允许对日志记录器端点进行只读访问。
Cloud Foundry条件端点暴露
与@ConditionalOnAvailableEndpoint一起使用的EndpointExposure.CLOUD_FOUNDRY枚举值已被弃用,取而代之的是EndpointExposure.WEB。典型的Spring Boot应用程序可能不会受到此更改的影响,但是,如果您有自定义的特定于Cloud Foundry的Actuator端点bean,则应更新条件以使用EndpointExposure.WEB。
HtmlUnit 4.3
HtmlUnit已升级到4.3。随着此次升级,依赖坐标从net.sourceforge.htmlunit:htmlunit更改为org.htmlunit:htmlunit,包名从com.gargoylesoftware.htmlunit更改为org.htmlunit。升级时,请相应地更新构建配置和导入。
Selenium HtmlUnit 4.22
Selenium HtmlUnit已更新到4.22。随着此次升级,依赖坐标从org.seleniumhq.selenium:htmlunit-driver更改为org.seleniumhq.selenium:htmlunit3-driver。升级时,请相应地更新构建配置。
WebJars定位器集成
为了加快启动时间并高效解析WebJars资产,您需要更新pom.xml/build.gradle以依赖org.webjars:webjars-locator-lite而不是org.webjars:webjars-locator-core(这两个依赖项均由Spring Boot管理)。请注意,Spring中对org.webjars:webjars-locator-core的支持现已弃用,并将在未来版本中删除。请参阅此功能的参考文档部分。
OkHttp依赖管理已移除
Spring Boot不再依赖OkHttp,因此不再管理其版本。如果您的应用程序有OkHttp依赖项,请更新其构建以使用满足其需求的OkHttp版本。
Netty在原生镜像中
Spring Boot 3.4使用的Netty版本尚未得到Native Build Tools中包含的GraalVM可达性元数据的支持。要使Netty在原生镜像中工作,您需要手动升级GraalVM可达性元数据版本。
对于Maven:
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<configuration>
<metadataRepository>
<version>0.3.14</version>
</metadataRepository>
</configuration>
</plugin>
对于Gradle:
graalvmNative {
metadataRepository {
version = '0.3.14'
}
}
Spring Boot 3.2中的弃用内容
在Spring Boot 3.2中被弃用并标记为在3.4中删除的类、方法和属性已在本版本中删除。在升级之前,请确保您没有调用弃用的方法。
最低要求更改
Gradle
Gradle 7.5、8.0、8.1、8.2和8.3不再受支持。现在需要Gradle 7.x(7.6.4或更高版本)或Gradle 8.x(8.4或更高版本)。
新特性和值得注意的地方
结构化日志记录
引入了对结构化日志记录的支持,内置支持Elastic Common Schema(ecs)、Graylog Extended Log Format(gelf)和Logstash(logstash)。要启用结构化文件日志记录,请将logging.structured.format.file设置为ecs、gelf或logstash。类似地,要启用结构化控制台日志记录,请设置logging.structured.format.console。
要了解有关Spring Boot对结构化日志记录的支持,包括如何定义自定义格式,请参阅参考文档。
@Fallback Beans
@ConditionalOnSingleCandidate现在支持@Fallback beans。如果有单个主bean,或者如果没有主bean但有单个非回退bean,则条件将匹配。
定义其他Beans
在类型匹配时,基于bean的条件现在将忽略任何不是默认候选者的bean。通过声明一个bean不是默认候选者(使用@Bean(defaultCandidate=false)),现在可以定义一个自动配置类型的bean,而不会导致相同类型的自动配置bean退出。这减少了在同一应用程序中使用两个DataSource bean或两个EntityManagerFactory bean等所需的配置。
ClientHttpRequestFactory构建器
添加了一个新的ClientHttpRequestFactoryBuilder接口,允许您为特定技术构建ClientHttpRequestFactory实例。构建器允许对底层组件进行细粒度的自定义,以及一种一致的方式来应用常见设置。
可以使用接口的静态工厂方法为特定库创建以下构建器:
- Apache HTTP Components(
ClientHttpRequestFactoryBuilder.httpComponents()) - Jetty Client(
ClientHttpRequestFactoryBuilder.jetty()) - Reactor Netty
HttpClient(ClientHttpRequestFactoryBuilder.reactor()) - JDK
HttpClient(ClientHttpRequestFactoryBuilder.jdk()) - 简单JDK
HttpURLConnection(ClientHttpRequestFactoryBuilder.simple())
有关更多详细信息,包括如何使用配置属性应用常见设置,请参阅更新的参考文档。
可观察性改进
应用程序组
新的spring.application.group属性可用于将应用程序分组在一起,例如,如果它们都属于某个业务单元或一个更大的应用程序安排。设置此属性时,它也会包含在日志消息中。此行为可以使用属性logging.include-application.group进行控制。应用程序组也会自动添加到OpenTelemetry Resource中。
OTLP
现在可以通过gRPC传输发送OTLP跨度。为此,请将新的配置属性management.otlp.tracing.transport设置为grpc。此属性默认为http。也为此添加了服务连接支持。
management.otlp.logs下的新属性可用于自动配置OpenTelemetry的OtlpHttpLogRecordExporter和SdkLoggerProvider。
其他可观察性更新
ProcessInfoContributor现在还显示有关堆和非堆使用情况的内存信息。
新的management.otlp.tracing.export.enabled、management.wavefront.tracing.export.enabled和management.zipkin.tracing.export.enabled属性现在可以更精细地启用或禁用跟踪导出。
AssertJ对MockMvc的支持
当AssertJ在类路径上时,提供对MockMvcTester的自动配置。MockMvcTester允许您使用流畅的API定义请求和断言。它可以注入到任何有MockMvc的地方。
有关更多详细信息,请参阅Spring Framework参考文档的专用部分。
Spring Pulsar
现在提供了用于配置默认租户和命名空间的配置属性。当使用不完全限定的主题URL消费或生产消息时,将应用默认值。使用spring.pulsar.defaults.topic.tenant和spring.pulsar.defaults.topic.namespace配置属性进行配置,或者定义自己的PulsarTopicBuilder bean。设置spring.pulsar.defaults.topic.enabled=false可禁用默认值。
添加了一个新的PulsarContainerFactoryCustomizer接口,以支持对自动配置的PulsarContainerFactory进行自定义。
spring.pulsar.consumer.subscription.name配置属性现在适用于自动配置的Pulsar监听器容器。
引入了两个新的配置属性,用于配置Pulsar客户端的并发:
spring.pulsar.client.threads.io控制用于处理与代理的连接的线程数。spring.pulsar.client.threads.listener控制用于消息监听器的线程数。
最后,新的spring.pulsar.listener.concurrency属性可用于控制自动配置的Pulsar消息监听器容器的并发。
Couchbase身份验证
现在可以使用客户端证书对Couchbase集群进行身份验证,作为基本用户名和密码身份验证的替代方法。有关更多详细信息,请参阅参考文档。
FreeMarker
现在可以自定义自动配置的FreeMarker的Configuration对象使用的FreeMarker变量。为此,定义一个或多个类型为FreeMarkerVariablesCustomizer的bean。这些bean将按照定义的顺序(如果有)被调用。
带有ActiveMQ Classic的嵌入式代理支持
由于ActiveMQ Classic现在再次支持嵌入式代理,自动配置已更新以支持它。
请注意,与Spring Boot 2.7.x相反,ActiveMQ启动器仅为客户端。要使用嵌入式代理,应将org.apache.activemq:activemq-broker添加到您的应用程序中。
配置元数据
注释处理器现在可以检测Enum的默认值。如果您添加了手动元数据来提供自定义属性的值,请确保将其删除。
弃用和替换自动配置类
为了更轻松地演进自动配置,引入了对弃用和替换自动配置类的支持。可以在新的META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.replacements文件中声明替换。要了解更多信息,请参阅参考文档。
虚拟线程
如果启用了虚拟线程,以下组件现在将使用它们:
OtlpMeterRegistry- Undertow Web服务器
镜像构建改进
Spring Boot现在默认使用paketobuildpacks/builder-jammy-java-tiny。此构建器开箱即支持ARM和x64平台。
在用于构建OCI镜像的Maven和Gradle插件中添加了一个trustBuilder选项。此选项控制如何调用CNB生命周期,在使用来自不可信源的构建器时提供更高的安全性。默认情况下,来自Paketo项目、Heroku和Google的构建器是受信任的。有关信息,请参阅Maven或Gradle文档。
在用于构建OCI镜像的Maven和Gradle插件中添加了一个imagePlatform选项。此选项可用于指定为运行CNB构建包而拉取的任何CNB构建器、运行时和构建包镜像的操作系统和架构。当主机平台支持模拟其他操作系统/架构时(例如,在使用Apple硅芯片的Mac上使用Rosetta模拟ARM主机上的AMD架构),可以使用此选项为与主机平台不同的操作系统和架构构建镜像。有关更多信息,请参阅Maven或Gradle文档。
Docker Compose改进
- 多配置文件支持:Docker Compose现在支持多个Docker Compose配置文件。
- 命令行参数改进:
- 新增
spring.docker.compose.start.arguments和spring.docker.compose.stop.arguments属性,可用于指定启动和停止服务时传递给Docker Compose子命令的额外命令行参数。 - 新增
spring.docker.compose.arguments属性,用于向Docker Compose传递参数。
- 新增
更新的支持
- 支持Postgres的
POSTGRES_HOST_AUTH_METHOD=trust环境变量。 - 分别使用
redis/redis-stack和redis/redis-stack-server容器镜像,添加了对Redis Stack和Redis Stack Server的支持。 - 使用
grafana/otel-lgtm容器镜像,添加了对Grafana LGTM的支持。 - 增加了对Hazelcast(使用
HazelcastConnectionDetails)的支持。 - 支持OTLP日志记录。
测试容器改进
- 支持
org.testcontainers.kafka.KafkaContainer。 - 分别使用
redis/redis-stack和redis/redis-stack-server容器镜像,添加了对Redis Stack和Redis Stack Server的支持。 - 支持
org.testcontainers.grafana.LgtmStackContainer。 - 支持Hazelcast(使用
HazelcastConnectionDetails)。 - 支持OTLP日志记录。
- 支持
RedisContainer。
Actuator
可插拔的Actuator暴露器
现在可以扩展Spring Boot,以可插拔的方式暴露Actuator端点。可以实现新的EndpointExposureOutcomeContributor接口来影响@ConditionalOnAvailableEndpoint条件。此扩展应使其更容易提供与现有Cloud Foundry支持类似的其他平台集成。
SSL信息和健康检查
如果使用SSL捆绑包,现在在/actuator/info下有一个新的端点显示SSL信息(有效期、颁发者、主题等)。此端点还会显示即将过期的证书,以提醒您需要尽快轮换它们。有一个新的配置属性management.health.ssl.certificate-validity-warning-threshold可用于配置阈值。还添加了一个新的健康检查来监控SSL证书。如果证书无效,它将状态设置为OUT_OF_SERVICE。
/actuator/scheduledtasks端点的额外信息
/scheduledtasks Actuator端点现在公开有关计划任务的额外元数据,例如“下一次计划执行时间”和“上次执行时间、状态和异常”。
依赖升级
Spring Boot 3.4迁移到了多个Spring项目的新版本:
- Spring AMQP 3.2
- Spring Authorization Server 1.4
- Spring Batch 5.2
- Spring Data 2024.1
- Spring Framework 6.2
- Spring HATEOAS 2.4
- Spring Integration 6.4
- Spring Kafka 3.3
- Spring Pulsar 1.2
- Spring Security 6.4
- Spring Session 3.4
众多第三方依赖也已更新,其中一些更值得注意的如下:
- Apache Http Client 5.4
- AssertJ 3.26
- Artemis 2.37
- Elasticsearch Client 8.15
- Flyway 10.20
- Gson 2.11
- Hibernate 6.6
- HtmlUnit 4.5.0
- JUnit Jupiter 5.11
- Jackson 2.18.0
- Jedis 5.2
- Kafka 3.8
- Lettuce 6.4
- Liquibase 4.29
- Log4j 2.24
- HtmlUnit 4.3
- MariaDB 3.4
- Micrometer 1.14
- Micrometer Tracing 1.4
- Mockito 5.13
- MongoDB 5.2.0
- MySQL 9.1
- OpenTelemetry 1.41
- Oracle Database 23.4
- R2DBC MySQL 1.3
- Rabbit AMQP Client 5.22
- Rabbit Stream Client 0.18.0
- Reactor 2024.0
- Selenium 4.25
- Testcontainers 1.20.3
- XMLUnit 2.10
杂项
除了上述更改之外,还有许多小的调整和改进,包括:
- 现在可以使用
Customizer<Liquibase>bean在Liquibase使用之前对其进行自定义。 - 用于创建JCache
CacheManager的属性现在可以通过定义JCachePropertiesCustomizerbean进行自定义。 - Spring MVC使用的
RequestToViewNameTranslator现在可以通过定义名为viewNameTranslator的bean进行自定义。 - Lettuce的
ClientOptions现在可以使用LettuceClientOptionsBuilderCustomizerbean进行自定义。要对整个LettuceClientConfiguration进行更广泛的配置,请继续使用LettuceClientConfigurationBuilderCustomizer。 - 新的自定义器
ProxyConnectionFactoryCustomizer可用于自定义R2DBCProxyConnectionFactory。 - 如果发生Spring Security注销,现在会发布一个审计事件。
JavaMailSender上的TLS现在可以使用新的属性spring.mail.ssl.*通过SSL捆绑包进行配置。- GSON的严格性现在可以使用新的
spring.gson.strictness属性进行配置。 @Name现在可以用于JavaBean风格的配置属性的字段上,以自定义其名称。- 当从另一个
DataSource派生时,如果源DataSource不公开驱动程序类名,DataSourceBuilder现在可以使用源DataSource的URL确定驱动程序类名。 - 在Cloud Foundry平台上,现在自动启用活跃度和就绪度健康探测。
- 新的属性
spring.application.version可用于读取和设置应用程序版本。该属性的默认值取自清单的Implementation-Version。 - 自动配置的
EntityManagerFactoryBuilder也定义了原生(例如Hibernate)属性。 - Spring Integration的
TaskScheduler现在即使没有使用@EnableScheduling也能感知虚拟线程。 @ConditionalOnAvailableEndpoint现在有一个value别名用于endpoint。- 添加了一个新的配置属性
spring.data.web.pageable.serialization-mode,用于配置Spring Data Web的序列化模式。 - 当使用
SpringApplication.from(…)语法时,现在可以指定要激活的其他配置文件。 - Spring Boot插件不再在构建包环境中设置
BP_NATIVE_IMAGE: true。 - 注册的
@ConfigurationPropertiesbean现在尊重@DependsOn、@Description、@Fallback、@Lazy、@Primary、@Scope和@Role注释。 - Log4j2的
MultiFormatStringBuilderFormattable现在在结构化日志记录中受支持。 - 添加了一个新的配置属性
spring.jms.listener.max-messages-per-task,用于配置监听器在一个任务中处理的最大消息数。 - 默认安全配置现在公开映射到其他路径的健康组。此外,两个
EndpointRequest类现在都提供toAdditionalPaths(…)方法。 - 会话cookie的分区属性现在可以通过属性设置。
- 添加了一个新的
server.jetty.max-form-keys属性,用于自定义Jetty的最大表单键数。 - 添加了新的属性
management.otlp.logging.connect-timeout和management.otlp.tracing.connect-timeout,用于配置到OTLP收集器的连接超时。 - 当通过OTLP发送日志时,添加了对gRPC传输的支持。
- 当绑定构建过程中构建包使用的容器中的目录时,现在会显示警告。
- 当使用
--enable-sbom=sbom构建原生镜像时,现在会自动检测此SBOM。 DatabaseDriver枚举现在支持ClickHouse JDBC驱动程序。- 新的属性
management.logging.export.enabled和management.otlp.logging.export.enabled可用于禁用日志导出。 - Spring Batch使用的
TaskExecutor现在可以通过定义一个带有@BatchTaskExectuor注释的TaskExecutorbean进行自定义。 - Spring Session自动配置现在在反应式Web应用程序中支持
indexed存储库类型。 - 如果未配置池暂停且创建了检查点,
HikariCheckpointRestoreLifecycle将记录警告。
Spring Boot 3.4中的弃用内容
spring.gson.lenient,改用spring.gson.strictness。@MockBean和@SpyBean,分别改用Spring Framework的@MockitoBean和MockitoSpyBean。org.springframework.boot.ResourceBanner#getApplicationVersion(Class<?>),改用spring.application.version属性。org.springframework.boot.SpringApplication#logStartupInfo(boolean),改用org.springframework.boot.SpringApplication#logStartupInfo(ConfigurationApplicationContext)。org.springframework.boot.logging.logback.ApplicationNameConverter,改用org.springframework.boot.logging.logback.EnclosedInSquareBracketsConverter。org.springframework.boot.actuate.autoconfigure.endpoint.expose.EndpointExposure#CLOUD_FOUNDRY,改用org.springframework.boot.actuate.autoconfigure.endpoint.expose.EndpointExposure#WEB。org.springframework.boot.actuate.autoconfigure.tracing.otlp.OtlpTracingConnectionDetails#getUrl(),改用getUrl(Transport)。org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryAutoConfiguration,改用org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryTracingAutoConfiguration。OtlpAutoConfiguration,改用OtlpTracingAutoConfiguration。management.endpoints.enabled-by-default和management.endpoint.<id>.enabled,分别改用management.endpoints.access.default和management.endpoint.<id>.access。@Endpoint上的enableByDefault,改用defaultAccess。










