虚拟线程+Spring Boot 3.x 迁移指南:三步切换,附完整改造清单
引言 上个月给支付网关做虚拟线程迁移,团队里两种声音吵了起来: 乐观派说:"加一行 spring.threads.virtual.enabled=true,官方一键开启,完了。" 保守派说:"别天真了,我们 30 万行代码,几十个自定义线程池、一堆 synchronized、手写对象池,一键开启约等于一键爆炸。" 两边都有道理。一键开启只对"干净"的应用成立——而我们 Review 完代码库后发现:17 个自定义线程池、23 处 synchronized 包裹 IO、4 个手写对象池。直接开,就是拿生产环境赌运气。 最终我们走了"三步迁移 + 完整改造清单"的路线:先替换 @Async 线程池、再升级 HTTP 客户端、然后给数据库连接池加保护,最后才开启虚拟线程开关。灰度上线后压测数据: 指标迁移前(传统线程池)迁移后(虚拟线程)变化 P99 延迟(下单链路)412ms124ms↓70% 吞吐(单实例 QPS)1,8507,400×4 峰值线程数200 + 32 async + 16 scheduler24 carrier + 万级虚拟线程内存↓30% 压测 30min 错误....