写点什么

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

评论

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

从0开始的支付业务架构演进之路

誰敢得罪我

探索js让你的网页“自己开口说话”

云小梦

JavaScript 音视频 audioContext API

专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?

钟奕礼

Java 编程 程序员 架构 面试

百家号在线视频编辑器的技术演进

百度Geek说

大前端

WebRtc学习之旅 —— Android端应用开发

小驰笔记

历史命令被黑客删除?教你实时备份

运维研习社

Linux 4月日更 服务器安全

零基础学Tableau系列 | 01—Tableau简介、条形图与直方图

不温卜火

数据可视化 数据清洗 4月日更

Redis 期中测试

escray

redis 学习 极客时间 Redis 核心技术与实战 4月日更

架构培训作业

肖春

架构师训练营

I'm Back

小天同学

思考 个人感悟 4月日更

源中瑞智慧平安社区--为平安生活助力

13530558032

智能取色-为多元化的产品场景选择完美的色彩组合

百度贴吧技术团队

智能取色 个性化 视觉策略 沉浸感

访问控制相关概念及常见模型

龙归科技

身份和访问管理

WebRtc学习之旅 —— 初认识

小驰笔记

新动能 · 新机遇:SaaS软件提供商 Zoho 25 周年战略再升级

科创人

莫高窟永不褪色的微笑,照耀在华为未曾止步的数据保护征程

脑极体

gorm源码阅读之schema

werbenhu

Go 语言 gorm

Golang 泛型浅析

D

开源 云原生 编译器 语言 Go 语言

勇做全球区块链“分布式存储”领航

CECBC

分布式

1.4 Go语言从入门到精通:Go代理goproxy

xcbeyond

Go 语言 4月日更 goproxy

区块链电子合同--赋能企业数字化转型

13530558032

拥抱云原生,基于eBPF技术实现Serverless节点访问K8S Service

UCloud技术

容器 云原生 k8s serverles

大厂面试必须掌握的 Linux 性能优化题

倪朋飞

Linux 面试 性能优化

美团点评高级1234面:算法+HashMap+Zookeeper+线程+Redis+kafka

钟奕礼

Java 编程 程序员 架构 面试

区块链的创新技术给奢侈品行业带来了新的机会

CECBC

奢侈品

可能是最糟糕的愚人节玩笑:科技史上的美式疯狂

脑极体

Java高级研发:2021阿里天猫、中间件、蚂蚁金服JD要求+面题答案

钟奕礼

Java 编程 程序员 架构 面试

2021阿里面试通关手册必备:5000字面经解析(技术/攻克)

比伯

Java 架构 面试 程序人生 计算机

朱嘉明:《量子时代和数字经济2.0 》推荐序

CECBC

数字经济

Redis为什么变慢了?一文讲透如何排查Redis性能问题 | 万字长文

Java redis 程序员 架构 计算机

Rust:范型使用trait限定的一点总结

Microwood

rust Trait 范型 范型约束Output Add

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