Spring Boot 3.2 正式发布,开箱即用的虚拟线程和 GraalVM,尝鲜一下!

Spring Boot3.0正式发布及新特性解读 阅读详情

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 

eb5eb52ec150ea5bf1ef5dad0fa44ae2.gif

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号等等功能:

  • Boot 地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • Cloud 地址:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

来源:medium.com/@egorponomarev

6ea42f9b32bf59ae00a4f3a597723dff.jpeg


Spring Boot 3.2 前几日发布,让我们用 Java 21、GraalVM 和虚拟线程来尝试一下。

Spring Boot 3.2 支持:

  • Java 21

  • 虚拟线程

  • 原生镜像(自 2022 年 11 月 Spring Boot 3.0 发布以来,Spring Boot 已在生产环境中支持 GraalVM 原生镜像)

Java 21

我们期待 2023 年 9 月 19 日发布的 Java 21,Spring Boot 3.2 已经做到完全支持了。

正如所声明的那样,Java 21 提供了数千项性能、稳定性和安全性改进,包括平台增强功能,可帮助开发人员提高生产力并推动整个组织的创新和增长。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

虚拟线程

更重要的更新之一是虚拟线程,这是 Project Loom 提供的功能。我们不打算深入细节,官方 JEP 提供了很好的解释:

https://openjdk.org/jeps/444

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

GraalVM 和本机镜像

GraalVM 是一种高性能 JDK,可以使用替代的即时 (JIT) 编译器来加快 Java 和基于 JVM 的应用程序的性能。

Native Image 是一种提前将 Java 代码编译为独立可执行文件(称为本机映像)的技术。该可执行文件包括应用程序类、其依赖项中的类、运行时库类以及来自 JDK 的静态链接本机代码。

它不在 Java VM 上运行,但包含来自不同运行时系统的必要组件,如内存管理、线程调度等。与 JVM 相比,生成的程序具有更快的启动时间和更低的运行时内存开销。

尝鲜一下

让我们从安装 Java 21.0.1 graal 开始,最简单的方法是使用SDKMAN 并将其指定为您机器的默认 Java 版本:

  • sdk install java 21.0.1-graal

  • sdk default java 21.0.1-graal

另一种安装方法是手动下载

https://www.graalvm.org/downloads/

我们将使用Spring Initializr页面创建一个新的Spring Boot项目,使用 Spring Boot 3.2.0、Java 21、Gradle-Groovy以及Spring Web和GraalVM本地支持依赖项。

要在 Spring Boot 3.2 中启用虚拟线程,我们只需在 application.yml 或 application.properties 文件中设置一个属性:

spring.threads.virtual.enabled:true

这个配置起到的作用:

  • Tomcat 将使用虚拟线程来处理 HTTP 请求。这意味着处理 Web 请求的应用程序代码(例如控制器中的方法)将在虚拟线程上运行。

  • 调用@Async方法时,Spring MVC 的异步请求处理和 Spring WebFlux 的阻塞执行支持现在将利用虚拟线程

  • 标记有@Scheduled的方法将在虚拟线程上运行

因此,我们将尝试使用这 3 个集成来实现虚拟线程。

此外,一些特定的集成将在虚拟线程上工作,例如 RabbitMQ/Kafka 监听器,以及 Spring Data Redis/Apache pulsar 相关的集成。但这些集成超出了本文的范围,有兴趣的可以参考 Spring Boot 3.2 官方示例。

代码

1.对于 Tomcat 传入的 HTTP 请求,我们创建一个简单的控制器:

@RestController
@RequestMapping("/test")
public class TestController {
    private static final Logger log = LoggerFactory.getLogger(TestController.class);

    @GetMapping
    public void test() {
        log.info("Rest controller method has been called {}", Thread.currentThread());
    }
}

2.异步任务

我们将在应用程序启动时调用其“run”方法

@Component
public class AsyncTaskExecutorService {
    private static final Logger log = LoggerFactory.getLogger(AsyncTaskExecutorService.class);

    @Async
    public void run() {
        log.info("Async task method has been called {}", Thread.currentThread());
    }
}

3.Scheduled 定时任务

一个简单的方法,每 15 秒调用一次

@Component
public class SchedulerService {
    private static final Logger log = LoggerFactory.getLogger(SchedulerService.class);

    @Scheduled(fixedDelayString = "15000")
    public void run() {
        log.info("Scheduled method has been called {}", Thread.currentThread());
    }
}

让我们运行我们的应用程序:

./gradlew bootRun

并调用我们的端点

curl — 位置 — 请求 GET 'localhost:8085/test'

我们得到什么:

Starting AppApplication using Java 21.0.1 with PID 38126
Started AppApplication in 1.131 seconds (process running for 1.491)
Async task method has been called VirtualThread[#52,task-1]/runnable@ForkJoinPool-1-worker-5
Scheduled method has been called VirtualThread[#46,scheduling-1]/runnable@ForkJoinPool-1-worker-1
Rest controller method has been called VirtualThread[#62,tomcat-handler-0]/runnable@ForkJoinPool-1-worker-1
Scheduled method has been called VirtualThread[#46,scheduling-1]/runnable@ForkJoinPool-1-worker-1

我们可以看到我们的方法的日志链接到公共 ForkJoinPool 线程池。

根据JEP:预期行为:

JDK 的虚拟线程调度程序是一个工作窃取的 ForkJoinPool,它以 FIFO 模式运行。调度程序的并行度是可用于调度虚拟线程的平台线程的数量。

现在让我们在 GraalVM 上运行它。

首先,我们需要构建一个 GraalVM 本机映像:(此命令可能需要几分钟)然后运行:(使用您的应用程序的名称而不是“app”)

./gradlew nativeCompile

./build/native/nativeComplie/app

它也可以工作,并且启动时间要快得多,这符合声明的“与 JVM 相比,生成的程序具有更快的启动时间和更低的运行时内存开销”。

在这里您可以找到包含本文中使用的代码的存储库来源:

https://github.com/egor-ponomarev/spring-boot3.2-with-graalvm-virtual-threads-example

结论

Spring Boot 3.2 是我们一直在等待的东西!具有虚拟线程的本机映像允许我们编写能够提供与 Go 类似级别的性能和可扩展性的代码,从而保持 JVM 的强大生态系统。

但是,您必须考虑到并非所有库都已采用其代码来与虚拟线程正常工作(在大多数情况下,它正在用 ReentrantLock 替换“synchronize”块),您应该小心虚拟线程将使用的逻辑。


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,“长按”或“扫描”下方二维码噢:

c08489bb48162acab2018efdd3a25bb4.png

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

e740648c608233f140e724dc30facef4.png

9008570a7d562f7b2e5bb53dc7614f5d.pnga420fc0ada53539348e039323b2de893.png7da49f1c519d744499fcf89ea116b339.png451c6d4befc83d868e69f675142acd46.png

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通) 阅读详情

相关推荐

使用 Spring Boot 和 GraalVM 的原生镜像

因此,我们需要为每个支持的目标系统构建一个版本,当我们使用 Docker 等容器技术时,这会更容易,我们可以将容器构建为可以部署到任何 Docker 运行时的目标系统。的目标是 AOT 处理(即,不是 AOT 编译自身,而是为 AOT 编译器收集元数据,例如,在代码中注册反射的使用)和构建可与 Docker 一起运行的 OCI 映像。然后,要使用 GraalVM 的原生映像构建器构建原生映像,我们需要使用 GraalVM 本身提供的 Maven 或 Gradle 插件来扩展我们的构建。这将使构建平台相关。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 1783

Graalvm Native Image 元数据适配

GraalVM:是一种高性能运行时,可显着提高应用程序性能和效率,是微服务的理想选择。它专为使用 Java、JavaScript、基于 LLVM 的语言(例如 C 和 C++)以及其他动态语言编写的应用程序而设计。它消除了编程语言之间的隔离,并在共享运行时实现了互操作性。它可以独立运行,也可以在 OpenJDK、Node.js 或 Oracle 数据库的上下文中运行。Graalvm 主要涉及到 VmWare,RedHat 和 Oracle Labs 三家。

yuluo的博客 1218

使用GraalVM 构建 Spring Boot 3.0 原生可执行文件

GraalVM Native Image 是GraalVM 提供的一种能够将Spring Boot 程序打包成云原生可执行文件的技术,并且比JVM 占用更少的内存和更快的启动速度,非常适合使用容器部署和在Faas平台使用。与在JVM运行的应用程序不同,GraalVM Native Image需要提前对代码进行编译处理才能创建可执行文件,GraalVM Native Image 的运行不需要提供JVM虚拟机。

分享技术干货和灵感、推荐新书和好玩的项目、分享Java面试题 6958

graalvm以nacos为注册中心打包dubbo项目解析

上链接!!! https://github.com/yangzehan/dubbo-nacos-native.git pom文件 pom文件中有一个需要注意的点 <compilerArgs> <arg>-parameters</arg> </compilerArgs> 假如你希望用上tri带的rest发布接口的模式,这个参数需要加上 不然访问接口会报错Name for argument of type [java.lang.String

asddd44的博客 1251

深入解析STM32H743双精度FPU:从配置误区到三角函数加速技巧

本文深入解析STM32H743双精度FPU的配置与优化技巧,涵盖常见误区、三角函数加速及飞控系统应用。通过实测数据展示如何利用FPU提升数学运算效率,特别适合工业控制、无人机飞控等高精度实时应用场景。

weixin_29190651的博客 641

网络设备心跳线带宽高导致虚拟化平台不稳定的问题处理

本文记录了网络设备心跳线带宽高导致虚拟化平台不稳定的问题处理一例。

forestqq的博客 2229

从踩坑到精通:Nacos配置中心在GraalVM环境下的Properties文件加载全解析

你是否曾在微服务部署时遭遇配置文件加载失败?是否在使用GraalVM原生镜像时遇到Nacos配置中心抛出的诡异异常?本文将深入剖析Nacos配置中心在GraalVM环境下的Properties文件加载问题,提供一套完整的解决方案,让你的微服务在高性能容器中稳定运行。 读完本文,你将获得: - 理解Nacos配置加载的核心流程 - 掌握GraalVM环境下的配置加载优化技巧 - 学会解决常见的Pr...

gitblog_00099的博客 484

射频收发机(RF Transceiver)

2,既然原来外差的思路是把声音频率的信号,通过混频搬移到高频电磁波频率,那对高频率信号放大的时候,是不是也可以先在比较低的射频频率进行放大,然后再通过频率搬移的方式,将放大后的信号搬移到高频率呢?频率搬移过程中,中间预先设定的固定射频频率被称为“中频”(中间频率,IF,Intermediate Frequency),由于这个频率超出了声音可听的范围,是“超声波”(supersonic),所以被命名为“超外差”(Super-Heterodyne)。混频后的信号在0频率附近,可能会发生DC偏移。

2301_77317229的博客 1123

RuoYi-Vue-Plus 5.0 大版本发布 SpringBoot 3.0 携手 多租户

为了更好的让大家了解 5.X 作者录制了相关的视频 供大家快速了解上手搭建与运行: https://www.bilibili.com/video/BV1Fg4y137JK/新功能与变更介绍: https://www.bilibili.com/video/BV1Us4y1m7ky/生产环境搭建部署: https://www.bilibili.com/video/BV1mL411e7ha/

竹林幽深 4403

ROS2入门到精通—— 1-1 Linux和ROS2基础

本文介绍了Linux的一般指令以及ROS2的常见理论和操作

BigDavid123的博客 3813

2026实测可用!4个专业AI Agent Skills垂直搜索平台对比

📊本文以表格形式整理4个实测可用的专业AI Agent Skills垂直搜索平台,涵盖资源规模、适配生态等关键维度🤖,适合开发者按需选择技能获取渠道,解决平台筛选与访问难题✨

XiaoqiangClub的博客 525

Java 运行包精简探索(GraalVM)

点击上方“芋道源码”,选择“设为星标”管她前浪,还是后浪?能浪的浪,才是好浪!每天 10:33更新文章,每天掉亿点点头发...源码精品专栏原创 | Java 2021超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码解析消息中间件 RocketMQ 源码解析数据库中间件 Sharding-JDBC 和 MyCAT 源码解析作业调度中间件 E...

芋艿V 954

基于simulink的能量管理策略的场景实例:混合动力电动汽车(HEV)的能量回收与分配策略

本文以混合动力电动汽车(HEV)为研究对象,通过Simulink建模详细演示了能量管理策略的设计与实现。内容涵盖HEV系统架构、核心组件工作原理,并分步骤指导搭建车辆动力学模型、动力系统组件模型和基于规则的能量管理策略。重点分析了制动能量回收与功率分配机制,通过仿真验证了逻辑门限策略在提升燃油经济性和维持电池SOC平衡方面的有效性。文章最后展望了更高级控制策略的应用前景,为HEV能量优化提供了完整的仿真研究框架。

xiaoheshang_123的博客 213

Java 生态的 2026 下半年趋势——虚拟线程、GraalVM 与 Spring Boot 4 展望

从 2024 年 Java 21 正式发布虚拟线程(Virtual Threads)至今,经过近两年的生产环境验证,这项特性已经从"实验性尝鲜"进入"生产默认选项"阶段。但它的落地过程并非一帆风顺——我们在一线观察到的最常见问题集中在三个方面:线程固定(Pinning)、ThreadLocal 滥用导致的资源泄漏,以及与连接池类库的兼容性。虚拟线程的核心价值在于让"每个请求一个线程"的一线程一连接(Thread-per-Request)模型重新变得可行。

alex_goden的博客 5974

Python 爬虫实战:Boss直聘 Python 岗位招聘数据爬取

本文介绍了一个Python爬虫项目,用于抓取Boss直聘平台的Python岗位招聘数据并进行可视化分析。项目采用requests库发送POST请求,通过抓包分析获取JSON接口,绕过HTML解析直接获取结构化数据。主要内容包括: 接口分析:找到关键POST接口,解析请求头和JSON参数格式 环境准备:安装requests/pandas/matplotlib/pyecharts等依赖库 核心实现: 手动获取登录Cookie 构建请求头和城市代码映射 实现分页抓取职位列表数据 项目特色在于直接解析JSON接口而

u014481728的博客 298

【图像超分】论文复现:新手入门必备!Pytorch实现SRGAN!手把手详细教程!代码注释详尽!可用于训练自己的数据集!实时验证模型性能!绘制PSNR曲线图!附训练好的各放大倍数的模型权重文件!

【图像超分】论文精读:SRResNet/SRGAN【图像超分】论文复现:万字长文!Pytorch实现SRResNet代码修改无报错!踩坑全记录!适合各种深度学习新手!帮助你少走弯路!附修改后的代码和PSNR最优的模型权重文件!请配合上述论文精读文章使用,效果更佳!与原论文描述不一样的实现部分,也即可以修改的部分数据集使用:论文中是ImageNet随机选35000张图像,本文是VOC2012数据集16700张图像。数据集预处理:裁剪大小不同,论文是96×96,本文是88×88。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 6855

Spring Cloud Alibaba 2025.1.0.0 正式发布:拥抱 Spring Boot 4.0 与 Java 21+ 的新时代

摘要: Spring Cloud Alibaba 2025.1.0.0正式发布,全面支持Spring Boot 4.0.2与Java 21+,标志着微服务生态的重大升级。新版本深度整合Project Loom虚拟线程与io_uring高性能I/O框架,显著提升并发处理能力与I/O效率,同时优化GraalVM原生镜像支持,降低启动时间和内存占用。该版本要求最低Java 21运行环境,并完成Jakarta EE 10适配,为开发者提供更高效的异步编程模型与云原生体验。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 7088

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Spring Boot 3.2 开箱即用的虚拟线程和GraalVM

来源:https://medium.com/@egorponomarev/spring-boot-3-2-with-virtual-threads-and-graalvm-out-of-the-box-1911d3ebf0b6Spring Boot 3.2 已经正式发布,让我们用 Java 21、GraalVM 和虚拟线程来尝试一下。Spring Boot 3.2 支持:Java 21虚拟线程原生...

程序猿DD 546

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Spring Boot 3.2 尝鲜,开箱即用的虚拟线程和 GraalVM

往期热门文章: 1、MyBatis的10种精妙用法,真是妙啊! 2、公司新来一个同事,试图在业务代码中炫技,被开了... 3、大文件:如何实现秒传、断点续传、分片上传? 4、彻底告别 Controller、Service、Dao,让人上瘾的开发神器... 5、40 个 SpringBoot 常用注解:让生产力爆表!Spring Boot 3.2 已经发布,让我们用 Java 21、GraalVM...

Java后端技术 282

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Spring Boot 3.2 正式发布,一波新特性,开箱即用!

点击关注公众号:互联网架构师,后台回复2T获取2TB学习资源!上一篇:2T架构师学习资料干货分享大家好,我是互联网架构师!Spring Boot 3.2 昨日发布,让我们用 Java 21、GraalVM 和虚拟线程来尝试一下。Spring Boot 3.2 支持:Java 21虚拟线程原生镜像(自 2022 年 11 月 Spring Boot 3.0 发布以来,Spring Boot 已在生...

emprere的博客 825

Spring Boot 3.5正式普及!Java虚拟线程+GraalVM原生镜像,启动仅0.3秒

开头先聊个扎心的场景早上九点,你端着咖啡坐到工位,着急发版。点开IDE,按下Run,然后去倒杯水、刷俩短视频、跟同事扯几句淡——回来一看,Spring Boot还在"Banner"那儿转呢,Tomcat还没初始化完。你盯着那个光标,感觉时间被按下了0.5倍速。这还不算完。到了云原生时代,K8s Pod说挂就挂,弹性扩容时需要秒级启动,结果你的Java应用愣是花了5秒钟才准备好。云厂商按秒计费,用户按秒流失,老板按秒皱眉。

人工智能AI技术 447

Spring Boot 3.0 正式发布,这份升级指南必须收藏

Spring Boot 3.0 现已正式发布,它包含了 12 个月以来 151 个开发者的 5700 多次代码提交。这是自 4.5 年前发布 2.0 以来,Spring Boot 的第一次重大修订。它也是第一个支持 Spring Framework 6.0 和 GraalVM 的 Spring Boot GA 版本,同时也是第一个基于Java 17的Spring Boot版本,以Jakarta E...

码农小胖哥 2万+

Spring Boot 4 震撼发布!三大王炸特性重构Java开发

时隔3年,Spring Boot 生态迎来里程碑式更新!2025年11月21日,Spring Boot 4.0 正式发布,基于 Spring Framework 7.0 构建,直接瞄准云原生性能巅峰与开发体验革命。 更关键的是,3.x 系列即将逐步退出开源支持周期,无论是新建项目还是存量系统迁移,这波升级都躲不开!今天就带大家吃透 Spring Boot 4 的核心升级点、环境要求和避坑指南,让你少走99%的弯路。

spb229443329的专栏 2668

Spring Boot 4.0 + JDK 25 + GraalVM:下一代云原生Java应用架构

摘要 本文探讨了Spring Boot 4.0、JDK 25与GraalVM Native Image的融合应用,旨在解决传统Java架构在云原生环境中的性能瓶颈。通过构建时AOT编译、虚拟线程优化和原生镜像技术,实现启动时间低于50ms、内存占用小于50MB的高效云原生应用。文章详细解析了三者的协同工作原理,包括Spring Boot 4.0的构建时处理、JDK 25虚拟线程特性与GraalVM的高级优化技术,并提供了实战配置示例,为开发者构建下一代高性能Java云原生应用提供了完整解决方案。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 5116
上一篇: 分布式定时调度:xxl-job 最佳实践
下一篇: 我调用第三方接口遇到的13大坑
公众号-芋道源码
博客等级 码龄10年 1634粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值