写点什么

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

评论

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

甲方日常 94

句子

工作 随笔杂谈 日常

app架构师,10天拿到字节跳动安卓岗位offer,好文推荐

欢喜学安卓

android 程序员 面试 移动开发

微信朋友圈高性能架构

chenmin

关于 Spring 中 getBean 的全流程源码解析

小傅哥

Java spring 源码分析 小傅哥 getBean流程

聪明人的训练(十九)

Changing Lin

4月日更

陌陌一面,为什么SpringBoot的 jar 可以独立运行?

Java小咖秀

jar maven springboot 集成 pom

架构训练营-模块二作业

Neil43

架构训练营

架构实战营第二模块作业

DZ

模块2—分析一下微信朋友圈的高性能复杂度

sandy

架构实战营

产品经理训练营 Week3 学习心得

Mai

华仔架构-模块

大师兄

产品经理训练营Week14学习心得

Mai

【LeetCode】移除元素Java题解

Albert

算法 LeetCode 4月日更

带你入门目标检测算法

华为云开发者联盟

网络 数据集 目标检测 yolo two-stage

微信朋友圈高性能复杂度分析

thewangzl

后端服务太多,且涉及多种语言,如何进行高效管理?

我爱娃哈哈😍

架构 架构设计 架构场景实战

模块二:课后作业

iHai

架构实战营

图算法系列之无向图的数据结构

Silently9527

Java 数据结构和算法 图算法 无向图

架构实战营-作业2

大肚皮狒狒

作业

细说Python Lambda函数的用法,建议收藏!

华为云开发者联盟

Python 函数 匿名 Lambda函数 表达式

架构实战营 模块二作业

Dylan

架构实战营

架构实战营模块2作业

林子钧

作业 架构实战营 模块二

产品经理训练营 Week4 学习心得

Mai

6种常见的地标识别算法整理和总结

华为云开发者联盟

KNN CNN 地标识别 GLDv2 地标识别算法

一文带你更方便的控制 goroutine

万俊峰Kevin

线程 并发 Go 语言 goroutine

这三年被分布式坑惨了,曝光十大坑

悟空聊架构

阿里P7手把手教你!系统学Android从零开始,内含福利

欢喜学安卓

android 程序员 面试 移动开发

架构实战营模块 2 作业

Lukefang

Spark任务等待与运行策略

小舰

4月日更

使用gradle插件发布项目到nexus中央仓库

程序那些事

Java maven Gradle 程序那些事

一文搞懂分布式锁的原理与实现

架构精进之路

分布式锁 4月日更

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