Spring Boot 4.0正式发布了

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” 服务:

@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

未来编程实验室

第 1 章 入门 ................................................ 1 1.1 Spring 风云再起 ........................................ 1 1.1.1 重新认识 Spring ............................ 2 1.1.2 Spring Boot 精要 ........................... 3 1.1.3 Spring Boot 不是什么 ................... 6 1.2 Spring Boot 入门 ....................................... 6 1.2.1 安装 Spring Boot CLI .................... 7 1.2.2 使用 Spring Initializr 初始化 Spring Boot 项目 .......................... 10 1.3 小结 ......................................................... 18 第 2 章 开发第一个应用程序 .................... 19 2.1 运用 Spring Boot ..................................... 19 2.1.1 查看初始化的 Spring Boot 新项目 .......................................... 21 2.1.2 Spring Boot 项目构建过程 解析 .............................................. 24 2.2 使用起步依赖 .......................................... 27 2.2.1 指定基于功能的依赖 ................... 28 2.2.2 覆盖起步依赖引入的传递依赖 .... 29 2.3 使用自动配置 .......................................... 30 2.3.1 专注于应用程序功能 ................... 31 2.3.2 运行应用程序 .............................. 36 2.3.3 刚刚发生了什么 ........................... 38 2.4 小结 ......................................................... 41 第 3 章 自定义配置 .................................... 42 3.1 覆盖 Spring Boot 自动配置 ..................... 42 3.1.1 保护应用程序 .............................. 43 3.1.2 创建自定义的安全配置 ............... 44 3.1.3 掀开自动配置的神秘面纱 ........... 48 3.2 通过属性文件外置配置 ........................... 49 3.2.1 自动配置微调 .............................. 50 3.2.2 应用程序 Bean 的配置外置 ......... 55 3.2.3 使用 Profile 进行配置 .................. 59 3.3 定制应用程序错误页面 ........................... 62 3.4 小结 ......................................................... 644 章 测试 ............................................... 66 4.1 集成测试自动配置 .................................. 66 4.2 测试 Web 应用程序 ................................. 68 4.2.1 模拟 Spring MVC ........................ 69 4.2.2 测试 Web 安全 ............................. 72 4.3 测试运行中的应用程序 ........................... 74 4.3.1 用随机端口启动服务器 ............... 75 4.3.2 使用 Selenium 测试 HTML 页面 ............................................. 76 4.4 小结 ......................................................... 78 第 5 章 Groovy 与 Spring Boot CLI ......... 80 5.1 开发 Spring Boot CLI 应用程序 .............. 80 5.1.1 设置 CLI 项目 .............................. 81 5.1.2 通过 Groovy 消除代码噪声 ......... 81 5.1.3 发生了什么 .................................. 85 5.2 获取依赖 .................................................. 86 5.2.1 覆盖默认依赖版本 ....................... 87 5.2.2 添加依赖仓库 .............................. 88 5.3 用 CLI 运行测试 ...................................... 89 5.4 创建可部署的产物 .................................. 91 5.5 小结 ......................................................... 91 第 6 章 在 Spring Boot 中使用 Grails ...... 93 6.1 使用 GORM 进行数据持久化 ................. 93 6.2 使用 Groovy Server Pages 定义视图 ....... 98 6.3 结合 Spring Boot 与 Grails 3 ................. 100 6.3.1 创建新的 Grails 项目 ................. 100 6.3.2 定义领域模型 ............................ 103 6.3.3 开发 Grails 控制器 ..................... 104 6.3.4 创建视图 .................................... 105 6.4 小结 ....................................................... 107 第 7 章 深入 Actuator .............................. 108 7.1 揭秘 Actuator 的端点 ............................ 108 7.1.1 查看配置明细 ............................ 109 7.1.2 运行时度量 ................................ 115 7.1.3 关闭应用程序 ............................ 121 7.1.4 获取应用信息 ............................ 121 7.2 连接 Actuator 的远程 shell .................... 122 7.2.1 查看 autoconfig 报告 ........... 123 7.2.2 列出应用程序的 Bean ............... 124 7.2.3 查看应用程序的度量信息 ......... 124 7.2.4 调用 Actuator 端点 .................... 125 7.3 通过 JMX 监控应用程序 ....................... 126 7.4 定制 Actuator ......................................... 128 7.4.1 修改端点 ID ............................... 128 7.4.2 启用禁用端点 ........................ 129 7.4.3 添加自定义度量信息 ................. 129 7.4.4 创建自定义跟踪仓库 ................. 132 7.4.5 插入自定义健康指示器 ............. 134 7.5 保护 Actuator 端点 ................................ 136 7.6 小结 ....................................................... 138 第 8 章 部署 Spring Boot 应用程序 ........ 139 8.1 衡量多种部署方式 ................................ 139 8.2 部署到应用服务器 ................................ 140 8.2.1 构建 WAR 文件 ......................... 141 8.2.2 创建生产 Profile ........................ 142 8.2.3 开启数据库迁移 ........................ 145 8.3 推上云端 ............................................... 150 8.3.1 部署到 Cloud Foundry ............... 150 8.3.2 部署到 Heroku ........................... 153 8.4 小结 ....................................................... 155 附录 A Spring Boot 开发者工具 .............. 157 附录 B Spring Boot 起步依赖 ................. 163 附录 C 配置属性 ...................................... 169 附录 D Spring Boot 依赖 ......................... 202
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值