写点什么

Spring Boot 3.2 提供对虚拟线程以及 RestClient 和 JdbcClient 的支持

作者:Sirisha Pratha

  • 2024-01-09
    北京
  • 本文字数:1517 字

    阅读完需:约 5 分钟

Spring Boot 3.2 提供对虚拟线程以及 RestClient 和 JdbcClient 的支持

Spring Boot 团队在 2023 年 11 月发布了 Spring Boot 3.2。这个最新版本包含了许多特性,其中最值得关注的是对虚拟线程和检查点协调恢复(Coordinated Restore at Checkpoint,CRaC)的支持。其他的特性包括 SSL Bundle 重加载、支持 RestClient 和 JdbcClient 接口,以及可观测性的增强。


在 JDK 21 中,一个非常重要的特性就是 Loom 项目的虚拟线程,JEP 将其描述为轻量级线程,可以显著减少编写、维护和观测高吞吐并发应用程序的工作量。


Spring Boot 3.2 集成了对虚拟线程的支持。要使用它的话,需要将 spring.threads.virtual.enabled 属性设置为 true ,并使用 JDK 21。在底层,Tomcat 和 Jetty 将会使用虚拟线程,这意味着处理 web 请求的应用程序代码现在将会在虚拟线程上运行。


除此之外,当通过该属性启用虚拟线程后,SimpleAsyncTaskExecutor 类也会被配置为使用虚拟线程,这会直接影响带有 @EnableAsync 注解的方法、异步 Spring MVC 以及 Spring WebFlux 阻塞调用的行为,在这种情况下,它们都将创建虚拟线程,而不是平台线程。


受此特性影响的其他领域包括 RabbitMQ 和 Kafka 的监听器、Spring Data Redis 和 Spring for Apache Pulsar。


RestClient 是 RestTemplate 的一个现代化替代方案,是 Spring Framework 6.1 引入的同步 HTTP 客户端。Spring Boot 现在通过创建和预配置 RestClient.Builder 的方式创建 RestClient 实例。它提供了一个函数式的 API,就像 Spring WebFlux 中对应的 WebClient API 类似。使用 RestClient 的一个主要优势在于为了调用远程 REST API,不再需要添加额外的 Spring WebFlux 依赖。


Spring 团队建议使用 RestClient 来调用远程 REST 服务,除非已经使用了 Spring WebFlux 或 Reactor 项目,在这种情况下,推荐的选择是 WebClient。


与 RestClient 类似,Spring Framework 6.1 引入了一个新的接口 JdbcClient,并在 Spring Boot 3.2 中对其进行了自动配置。它提供了一个流畅 API 来执行常见的数据库操作。


Spring Boot 3.1 首次引入了 SSL Bundle,用于配置和使用 SSL 信息,比如 keystore、证书和私钥等。在 Spring Boot 3.2 中,通过设置 reload-on-update=true 属性,我们可以在 SSL 信任物料发生变化的时候重新加载 SSL bundle。Netty 和 Tomcat web 服务器支持热重新加载。我们可以使用相关的 spring.ssl.bundle.watch.file.quiet-period=10s 属性来配置静默期,在静默期之后将会探测变更。


Spring Boot 3.2 对可观测性进行了一些增强。当 spring-boot-starter-aop 位于类路径中时,Micrometer 的注解,比如 @Timed、@Counted、@NewSpan、@ContinueSpan 和 @Observed,均可声明式地使用。使用 @Scheduled 注解标注的方法进行了插装,以支持可观测性。通过将 management.observations.enable 属性设置为 false,可用禁用以指定名称开头的观测。在 Spring Boot 3.2 中,management.metrics.tags 属性已被废弃,取代它的是 management.observations.key-values。添加通用的键 - 值可以应用到所有具备该属性的观测中。请阅读该版本中可观测性改进的完整列表。


Broadcom 的 Spring 开发人员倡导者 Josh Long 告诉 InfoQ:


现在是成为 Spring 和 Java 开发人员的最佳时机。通过支持 CRaC 项目(在某些 OpenJDK 发行版中已可用) 和 Loom 项目(从 Java 21 可用),Spring Boot 3.2 提供了优异的运行时效率。这些特性与现有的支持 GraalVM 原生镜像的工作相结合,为 Spring Boot 开发人员在生产环境中寻找最佳体验提供了绝佳的机会。


关于升级和值得关注的完整变更列表,请参阅官方发布说明。


原文链接:

https://www.infoq.com/news/2023/12/spring-boot-virtual-threads/?accessToken


声明:本文由 InfoQ 翻译,未经许可禁止转载。

2024-01-09 08:007759

评论

发布
暂无评论
发现更多内容

科学智能赋能空间科学研究(1):中国空间站空间科学实验的数据生态构建

ModelWhale

大模型 科学智能 AI4S 空间科学

ShadowSql之表达式树

电子尖叫食人鱼

数据库 sql

贡献 OpenHarmony 库关键配置

飞龙AI

OpenHarmony HarmonyOS NEXT 自研框架

阿里云人工智能平台PAI开源EasyDistill框架助力大语言模型轻松瘦身

阿里云大数据AI技术

数据分析 #开源 #大模型 #大数据 PAI

鸿蒙5开发宝藏案例分享---一多分级导航栏开发实践

莓创技术

二级域名怎么申请?二级域名申请费免费吗?

防火墙后吃泡面

NocoBase 本周更新汇总:优化及缺陷修复

NocoBase

开源 低代码 零代码 无代码 版本更新

破局传统采购!采购文件编制审核系统为烟草行业数智化加速

中烟创新

鸿蒙5开发宝藏案例分享---一多分栏开发实践

莓创技术

一文掌握 browser-use:基于 DeepSeek 的浏览器自动化实战

测试人

人工智能 软件测试

Sentieon 项目文章 | 社区努力识别和纠正蛋白质基因组研究中标签错误的样本

INSVAST

蛋白质 多组学 Sentieon 变异分析 生信分析服务

Web前端入门:JavaScript 各种数组定义与数组取值方法

不在线第一只蜗牛

JavaScript

鸿蒙5开发宝藏案例分享---一多开发实例(银行理财)

莓创技术

动态判断:如何用"群体智慧"优化AI数据标注流程?

澳鹏Appen

动态判断 dynamic judgements

人工智能浪潮下,制造企业如何借力DeepSeek实现数字化转型?

万界星空科技

人工智能 数字化转型 制造业 mes DeepSeek

鸿蒙5开发宝藏案例分享---一多开发实例(短视频)

莓创技术

鸿蒙5开发宝藏案例分享---一多开发实例(购物比价)

莓创技术

鸿蒙5开发宝藏案例分享---折叠屏悬停态开发实践

莓创技术

iVX 安全架构技术白皮书

代码制造者

鸿蒙5开发宝藏案例分享---一多开发实例(长视频)

莓创技术

鸿蒙5开发宝藏案例分享---一多开发实例(即时通讯)

莓创技术

杂七杂八系列----浅谈.NET微服务架构的演变

秃头小帅oi

2025 BOE(京东方)全球供应伙伴大会隆重举行 共筑全球显示产业共生共赢新格局

爱极客侠

鸿蒙5开发宝藏案例分享---一多开发实例(社区评论)

莓创技术

京东拍立淘图片搜索API接口指南

tbapi

京东API 京东图片搜索接口 京东拍立淘接口

鸿蒙5开发宝藏案例分享---一多窗口适配开发实践

莓创技术

鸿蒙5开发宝藏案例分享---Web适配一多开发实践

莓创技术

怎么选择合适的高防IP

网络安全服务

CDN 服务器 宽带 高防IP DDoS 攻击

鸿蒙5开发宝藏案例分享---一多断点开发实践

莓创技术

鸿蒙5开发宝藏案例分享---一多交互事件开发实践

莓创技术

Spring Boot 3.2 提供对虚拟线程以及 RestClient 和 JdbcClient 的支持_编程语言_InfoQ精选文章