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

Spring Webflux项目中Callable异步接口不生效问题咨询

问题根因分析

你引入的是spring-boot-starter-webflux依赖,属于响应式Web技术栈,不支持Spring MVC体系下的Callable异步返回处理逻辑:

  • Spring MVC中框架会识别返回值为Callable类型,自动提交到线程池异步执行,完成后再将结果返回给前端
  • WebFlux没有内置Callable返回值的处理器,会直接将Callable实例当做普通POJO做JSON序列化,由于Callable接口没有可供序列化的Getter方法,最终序列化结果就是空对象{},且Callable的call()方法全程不会被调用,因此不会打印"async"日志。
解决方案

方案1:切换为Spring MVC技术栈

将pom.xml中的spring-boot-starter-webflux依赖替换为Spring Web依赖即可,原有业务代码无需修改:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

替换后重启项目,访问接口即可2秒后返回"hello",控制台也会打印对应日志。

方案2:适配WebFlux响应式写法

如果需要保留WebFlux技术栈,将返回值改为WebFlux支持的Mono类型即可:

@GetMapping("/callable")
public Mono<String> callable() {
    log.info("callable");
    return Mono.fromCallable(() -> {
        log.info("async");
        Thread.sleep(2000);
        return "hello";
    // 若需要业务逻辑异步执行,可指定响应式调度器
    }).subscribeOn(Schedulers.boundedElastic());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:36:05