Spring Boot 4.0正式发布了

Spring Boot 4.0最近GA了,下面是4.0版本的发布说明。

1. 从 Spring Boot 3.5 升级

由于这是一个主要版本的发布,升级现有应用程序可能比平时更复杂一些。我们编写了一个专门的迁移指南来帮助您升级现有的 Spring Boot 3.5 应用程序。

迁移指南:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.0-Migration-Guide

如果您目前运行的是早期版本的 Spring Boot,我们强烈建议您先升级到 Spring Boot 3.5,然后再迁移到 Spring Boot 4.0。

2. 新特性和亮点

提示:查看配置更改日志以获取配置更改的完整概述。

配置更改日志:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.0-Configuration-Changelog

2.1 里程碑版本发布

从 4.0.0-M1 开始,所有 Spring Boot 里程碑版本(和发布候选版本)现在除了在 https://repo.spring.io 发布外,还发布到 Maven Central。这使得在 4.x 系列中尝试新的里程碑版本变得更加容易。

2.2 Gradle 9

现在支持使用 Gradle 9 构建 Spring Boot 应用程序。对 Gradle 8.x(8.14 或更高版本)的支持仍然存在。

2.3 HTTP 服务客户端

Spring Boot 现在包括对 HTTP 服务客户端的自动配置支持和配置属性。HTTP 服务客户端允许您注释普通的 Java 接口,并让 Spring 自动创建它们的实现。

例如,以下接口可用于调用 "echo" 服务:

java 复制代码
@HttpExchange(url = "https://echo.zuplo.io")
public interface EchoService {
    @PostExchange
    Map<?, ?> echo(@RequestBody Map<String, String> message);
}

有关此功能的完整详细信息,请参阅相关的文档(https://docs.spring.io/spring-boot/4.0/reference/io/rest-client.html#io.rest-client.httpservice)。

2.4 API版本

为 Spring MVC 和 Spring WebFlux 添加了 API 版本控制的自动配置。

可以使用 spring.mvc.apiversion.* 或 spring.webflux.apiversion.* 属性配置 API 版本控制。对于更高级的控制,可以定义 ApiVersionResolver、ApiVersionParser 和 ApiVersionDeprecationHandler 类型的 bean。

有关更多详细信息,请参阅参考文档(MVC、WebFlux)。

Spring Web MVC:

https://docs.spring.io/spring-boot/4.0/reference/web/servlet.html#web.servlet.spring-mvc.api-versioning

WebFlux:

https://docs.spring.io/spring-boot/4.0/reference/web/reactive.html#web.reactive.webflux.api-versioning

2.5 JmsClient

JMS 的自动配置现在包括对新 JmsClient API 的支持。对 JmsTemplate 和 JmsMessagingTemplate 的支持保持不变。

2.6 任务装饰

任务调度和任务执行的自动配置现在支持多个 TaskDecorator bean。当上下文中包含多个 TaskDecorator bean 时,将创建一个委托给它们的 CompositeTaskDecorator。各个装饰器按照 @Order 和 Ordered 定义的顺序调用。

2.7 OpenTelemetry starter

添加了一个新的starter,spring-boot-starter-opentelemetry。此starter引入了通过 OTLP 导出指标和跟踪所需的所有依赖项。它还将自动配置 OpenTelemetry SDK。

2.8 外部类型的配置属性元数据

现在,@ConfigurationProperties 注解的类型可以引用位于不同模块中的类型。要从此类模块中获取元数据,您应添加注解处理器(如果需要)并使用 @ConfigurationPropertiesSource 标记该类型。

有关更多详细信息,请参阅参考文档(https://docs.spring.io/spring-boot/4.0/specification/configuration-metadata/index.html)。

2.9 SSL信息

从 SSL 信息贡献中移除了对证书有效性阈值的支持。状态为 WILL_EXPIRE_SOON 的证书现在将显示为 VALID。证书有效期的开始和结束信息保持不变。

2.10 SSL健康

包含一个或多个将在配置阈值内过期的证书(management.health.ssl.certificate-validity-warning-threshold)的证书链现在在健康响应的详细信息中列在一个新的 expiringChains 条目中。不再使用 WILL_EXPIRE_SOON 状态,即将过期的证书将具有 VALID 状态。

2.11 MongoDB健康指示器

MongoDB 健康指示器已重新设计,不再需要 Spring Data MongoDB。这允许在使用 MongoDB Java 驱动程序直接使用时提供健康信息。

作为此更改的一部分,健康指示器已从 spring-boot-data-mongodb 移动到 spring-boot-mongodb。它们的包也已相应更新。

2.11.1 MongoDB属性

引入了一个新属性 spring.data.mongodb.representation.big-decimal,用于控制 Spring Data MongoDB 如何在 MongoDB 中存储 BigDecimal(和 BigInteger)值。

还重命名了一些属性。有关详细信息,请参阅迁移指南(https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.0-Migration-Guide)。

2.12 Kotlin序列化

Spring Boot 现在提供了一个新的 "spring-boot-kotlinx-serialization-json" 模块和相应的 "spring-boot-starter-kotlin-serialization",用于支持 Kotlin 序列化。这将提供一个 Json bean,并使用可用的 spring.kotlinx.serialization.json.* 属性进行配置。

注意,还将为应用程序提供一个 HttpMessageConverter,并将其设置为优先于其他 JSON 转换器(作为回退)。

2.13 RestTestClient

添加了对新引入的 RestTestClient 的支持(https://docs.spring.io/spring-framework/reference/testing/resttestclient.html)。

使用常规的 @SpringBootTest 或使用 @AutoConfigureMockMvc 时,您可以自动装配一个在底层 MockMvc 实例上操作的 RestTestClient。

对于集成测试,即使用 @SpringBootTest 并定义或随机端口时,可以注入一个 RestTestClient 以针对正在运行的服务器。

2.14 Redis静态主/副本

添加了对静态主/副本的自动配置。此功能仅由 Lettuce 支持。

要使用它,请使用新的 spring.data.redis.masterreplica.nodes 属性提供静态节点列表。

2.15 Redis可观测性

改进了 Redis 的自动配置,以自动配置 MicrometerTracing,而不是 MicrometerCommandLatencyRecorder。前者在观察 API 上操作,并提供指标和跨度。

2.16 依赖升级

Spring Boot 4.0 移至多个 Spring 项目的新版本:

  • Micrometer 1.16
  • Micrometer Tracing 1.6
  • Reactor 2025.0
  • Spring AMQP 4.0
  • Spring Batch 6.0
  • Spring Data 2025.1
  • Spring Framework 7.0
  • Spring GraphQL 2.0
  • Spring HATEOAS 3.0
  • Spring Integration 7.0
  • Spring for Apache Kafka 4.0
  • Spring LDAP 4.0
  • Spring for Apache Pulsar 2.0
  • Spring REST Docs 4.0
  • Spring Security 7.0
  • Spring Session 4.0
  • Spring WS 5.0

还更新了许多第三方依赖项,其中一些值得注意的包括:

  • Artemis 2.43.0
  • Brave 6.3
  • Commons Codec 1.19
  • Commons Lang3 3.19.0
  • Couchbase Client 3.9
  • Ehcache3 3.11.1
  • Elasticsearch Client 9.1
  • Flyway 11.11
  • GraphQL 24
  • Groovy 5.0
  • Gson 2.13.2
  • H2 2.4
  • Hibernate 7.1
  • Hibernate Validator 9.0
  • HikariCP 7.0
  • HtmlUnit 4.16.0
  • Jackson 3.0
  • Jakarta Annotation 3.0
  • Jakarta Persistence 3.2
  • Jakarta Servlet 6.1
  • Jakarta Validation 3.1
  • Jakarta WebSocket 2.2
  • Jakarta WS RS 4.0
  • Jedis 6.2.0
  • Json-smart 2.6.0
  • Jetty 12.1
  • Kafka 4.1.0
  • Kotlin 2.2.20
  • Kotlin Serialization 1.9
  • Lettuce 6.8.1.RELEASE
  • Liquibase 5.0
  • Maven AntRun Plugin 3.2
  • Maven Javadoc Plugin 3.12
  • Mockito 5.20
  • MongoDB 5.6.0
  • MSSQL JDBC 13.2
  • Native Build Tools Plugin 0.11
  • Neo4j Java Driver 6.0
  • OpenTelemetry 1.54.0
  • Pulsar 4.1.0
  • R2DBC H2 1.1
  • R2DBC Postgresql 1.1
  • Rabbit AMQP Client 5.27
  • Selenium 4.37
  • Selenium HtmlUnit 4.35
  • SnakeYAML 2.5
  • TestContainers 2.0
  • Tomcat 11.0
  • XML Maven Plugin 1.2

2.17 其他改进

除上述更改外,还进行了许多小的调整和改进,包括:

  • Micrometer 的指标方面的自动配置现在启用了对带有基于 SpEL 的 ValueExpressionResolver 的 @MeterTag 的支持,适用于 @Counted 和 @Timed 方法。
  • 对 MongoDB 的 @ServiceConnection 支持现在支持 Testcontainers 的 MongoDBAtlasLocalContainer。
  • 当配置属性绑定因类未找到错误而失败时,改进了错误消息。
  • 重新命名了几个反应式自动配置类以保持一致性。
  • 从自动配置类中移除了公共成员(常量除外)。自动配置从来不是公共 API,现在通过 Java 机制强制执行。
  • 当 spring.threads.virtual.enabled 为 true 时,由 JDK HttpClient 支持的自动配置 HTTP 客户端现在配置为使用虚拟线程。
  • 引入了一个 logging.console.enabled 属性。将其设置为 false 可禁用控制台日志记录。
  • 改进了 Log4j 3 的 Log4j Core 配置文件检测。
  • 优化了 DevTools 重启中的资源查找。
  • 将 ScheduledTasksObservabilityAutoConfiguration 重命名为 ScheduledTasksObservationAutoConfiguration 以保持一致性。
  • 现在支持使用新的 spring.elasticsearch.api-key 属性通过 API 密钥对 Elasticsearch 进行身份验证。
  • 将ConditionalOnEnabledTracing重命名为 ConditionalOnEnabledTracingExport。
  • 将属性management.tracing.enabled重命名为 management.tracing.export.enabled。
  • SanitizableData.getKey() 和 SanitizableData.getLowerCaseKey() 永远不会返回 null。传递 null 值作为 SanitizableData 的键现在将抛出异常。
  • 在 PropertiesConfigAdapter 中引入了专门的接口,以更好地处理空值。
  • 将属性spring.dao.exceptiontranslation.enabled重命名为 spring.persistence.exceptiontranslation.enabled。
  • 现在可以使用 server.tomcat.resource.cache-max-size 属性配置 Tomcat 静态缓存的最大大小。
  • 进一步完善了 JSpecify 空值注释。
  • 现在可以在 MANIFEST.MF 中将 Spring-Boot-Jar-Type 设置为 development-tool,以从 uber jars 中排除依赖项。
  • 现在将 AWS Elastic Container Service (ECS) 平台识别为一个 CloudPlatform。
  • 添加了对 Micrometer 的 @ObservationKeyValue 的支持。
  • 进一步完善了 JSpecify 空值注释。
  • 将自动配置类导入的配置中的公共成员设为包私有。
  • HTML Unit的LocalHostWebClient 和LocalHostWebConnectionHtmlUnitDriver已被UriBuilderFactoryWebClient和UriBuilderFactoryWebConnectionHtmlUnitDriver取代。
  • 添加了一个新的配置属性,用于控制是否启用 Elasticsearch 客户端的嗅探器。

3. Spring Boot 4.0.0中的弃用

  • OperationMethod(Method method, OperationType operationType) 被弃用,推荐使用 OperationMethod(Method method, OperationType operationType, Predicate optionalParameters)。
  • Jackson 2 支持以弃用形式提供。
  • org.springframework.boot.env.EnvironmentPostProcessor 被 org.springframework.boot.EnvironmentPostProcessor 替代,但旧接口仍以弃用形式保留以简化升级过程。

参考

  1. https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.0-Release-Notes
相关推荐
飞梦工作室42 分钟前
企业级 Spring Boot 邮件系统开发指南:从基础到高可用架构设计
java·spring boot·后端
haiyu柠檬1 小时前
在Spring Boot中实现Azure的SSO+VUE3前端配置
java·spring boot·后端
q***72191 小时前
springBoot 和springCloud 版本对应关系
spring boot·后端·spring cloud
百***81271 小时前
【SpringBoot】SpringBoot中分页插件(PageHelper)的使用
java·spring boot·后端
百***86461 小时前
SpringBoot中自定义Starter
java·spring boot·后端
q***07141 小时前
VScode 开发 Springboot 程序
java·spring boot·后端
q***46521 小时前
Spring中使用Async进行异步功能开发实战-以大文件上传为例
java·后端·spring
q***38511 小时前
SpringCloud实战【九】 SpringCloud服务间调用
java·spring boot·spring cloud
岚天start1 小时前
K8S环境中Containerd运行时占用文件定位清理
java·rpc·kubernetes