写点什么

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:007289

评论

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

ClickHouse与Elasticsearch压测实践

京东科技开发者

elasticsearch 分布式 数据分析 Clickhouse 数据库·

SpringCloud 注册中心 (Eureka) 快速入门

微服务 Eureka SpringCould 8月月更

深圳选择java培训机构哪家靠谱?

小谷哥

一文读懂数据科学Notebook

Baihai IDP

人工智能 ide AI notebook 数据科学

如何有效改进回顾会议(下)?

敏捷开发

Scrum 回顾会 Scrum团队

设计模式的艺术 第十章桥接设计模式练习(设计一个数据转换工具,可以将数据库中的数据转换成多种文件格式,例如txt、xml、pdf等格式,同时该工具需要支持多种不同的数据库)

代廉洁

设计模式的艺术

参加大数据培训机构学习前景怎么样

小谷哥

Tapdata 获得阿里云首批产品生态集成认证,携手阿里云共建新合作

阿里巴巴云原生

阿里云 Serverless 云原生 SAE 合作

【小程序】view视图,swiper轮播图,scroll-view滑动列表 (在线详细手册)

计算机魔术师

8月月更

为什么MatrixOne 0.5变慢了

MatrixOrigin

矩阵起源 MatirxOrigin MatirxOne 因子化

SpringCloud Eureka参数配置项详解

echoes

如何快速地学习东西(下篇)

宇宙之一粟

学习方法 8月月更

分分钟带你了解 ES2022 最重要的 4 个特性!

掘金安东尼

前端 8月月更 ES2022

项目经理和ScrumMaster可以是同一个人吗?

ShineScrum

Scrum 敏捷 ScrumMaster 项目经理

蓝牙5.0简介、nRF52832 BLE样例工程框架及main函数初始化流程简析

矜辰所致

蓝牙 启动流程 8月月更 nRF52832

NFT平台开发:NFT数字馆藏平台开发

开源直播系统源码

数字藏品软件开发 数字藏品开发 数字藏品系统

无需编写一行代码,实现任何方法的流量防护能力

阿里巴巴云原生

阿里云 微服务 云原生 流量

选择web前端培训机构需要注意什么?

小谷哥

另眼旁观 Linkerd 2.12 的发布:服务网格标准的曙光?

张晓辉

云原生 kuberne Linkerd 服务网格

建成 5000 多间「梦想中心」后,他们决定将技术开源

腾源会

开源 公益 腾源会

web前端培训学习应该注意什么

小谷哥

10大常用的排序算法(算法分析+动图演示)

Five

算法 排序算法 8月月更

研发管理 DevOps 最佳实践之三问三答

极狐GitLab

DevOps gitlab CI/CD 代码规范 gitops

你还有什么问题吗?

AlwaysBeta

程序员 面试

leetcode 227. Basic Calculator II 基本计算器 II(中等)

okokabcd

LeetCode 算法与数据结构

大厂裁员小厂跑路,是时候做这件事了,否则到时可别后悔!!!

CRMEB

java程序员培训学习需要多长时间?

小谷哥

【小程序项目开发 --- 京东商城】 启航篇之uni-app项目搭建

计算机魔术师

8月月更

【小程序项目开发-- 京东商城】uni-app开发之配置 tabBar & 窗口样式

计算机魔术师

8月月更

2022 世界人工智能大会|人工智能与开源技术先锋论坛即将开幕

Kyligence

开源技术 人工智能大会

入门机器学习?还是先抢救一下数学吧!

博文视点Broadview

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