Spring Boot 3.4.0 发行:革新与突破的里程碑
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,
15年
工作经验,精通Java编程
,高并发设计
,Springboot和微服务
,熟悉Linux
,ESXI虚拟化
以及云原生Docker和K8s
,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea
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 变量自定义:能通过
FreeMarkerVariablesCustomizer
bean 灵活定制自动配置的 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-default
management.endpoint.<id>.enabled
它们的替代品是:
management.endpoints.access.default
management.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
的属性现在可以通过定义JCachePropertiesCustomizer
bean进行自定义。 - Spring MVC使用的
RequestToViewNameTranslator
现在可以通过定义名为viewNameTranslator
的bean进行自定义。 - Lettuce的
ClientOptions
现在可以使用LettuceClientOptionsBuilderCustomizer
bean进行自定义。要对整个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
。 - 注册的
@ConfigurationProperties
bean现在尊重@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
注释的TaskExecutor
bean进行自定义。 - 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
。