You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot WebFlux中POST请求无法启用Virtual Threads问题求助

问题原因

WebFlux 默认基于 Reactor 的 NIO 线程池处理请求,当启用 spring.threads.virtual.enabled=true 时,仅对无请求体的同步控制器方法(如你的 GET 请求)自动切换到虚拟线程执行。而 POST 请求因为需要先在 NIO 线程上完成请求体的解析,后续方法执行阶段未自动触发虚拟线程切换,导致仍使用 NIO 线程。

解决方案

以下两种方式可以让 POST 请求也使用虚拟线程:

方式一:手动将方法逻辑调度到虚拟线程

修改 POST 方法,将同步逻辑包装到 Mono.fromCallable 并指定虚拟线程调度器:

@PostMapping
public Mono<String> getHello(@RequestBody String name) {
    return Mono.fromCallable(() -> {
        log.info("{}", Thread.currentThread());
        return String.format("Hello %s!", name);
    }).subscribeOn(Schedulers.virtual());
}

方式二:全局配置 WebFlux 使用虚拟线程

创建配置类,为所有 WebFlux 请求添加虚拟线程调度器:

@Configuration
public class WebFluxVirtualThreadConfig {

    @Bean
    public Scheduler virtualThreadScheduler() {
        return Schedulers.virtual("webflux-virtual");
    }

    @Bean
    public WebFilter virtualThreadFilter(Scheduler scheduler) {
        return (exchange, chain) -> chain.filter(exchange).subscribeOn(scheduler);
    }
}

配置完成后,所有请求(包括 POST)的处理都会切换到虚拟线程执行,控制台日志会显示类似 VirtualThread[...] 的线程信息。

内容的提问来源于stack exchange,提问作者Vik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 09:35:40