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

升级JDK17与Spring Boot3后@Async仅支持Future/void返回类型问题

问题原因与解决方案

根源说明

这个异常是Spring Boot 3.0(底层依赖Spring Framework 6.0)的版本变更导致的,和JDK 17没有直接关系。

在Spring Boot 2.x(对应Spring Framework 5.x)中,@Async方法返回非void、非Future系列类型时,Spring不会抛出异常,但会同步执行该方法(并没有真正实现异步)。而Spring Framework 6.0开始,为了避免这种“假异步”的误导,严格校验了@Async方法的返回类型,不符合要求直接抛出异常。你之前的代码在2.7.5版本能运行,但实际上并没有真正异步执行。

解决方案

要让方法真正异步执行且符合新版本要求,需要修改返回类型为CompletableFuture<ResponseModel>(推荐,适配Java 8+的异步编程模型):

@Async("threadPoolTaskExecutor")
@Override
public CompletableFuture<ResponseModel> startRequest(RequestModel request, Logger logger) throws Exception {
    // 原有业务逻辑处理
    ResponseModel response = ...;
    return CompletableFuture.completedFuture(response);
}

调用方如需获取结果,可调用CompletableFuture的get()或join()方法(注意处理阻塞逻辑或使用异步回调)。

如果业务场景不需要返回值,也可以将方法返回类型改为void,但显然你的场景需要返回结果,因此优先推荐CompletableFuture方案。

额外说明

线程池threadPoolTaskExecutor的配置本身不是导致该异常的原因,只要你已正确定义对应的ThreadPoolTaskExecutor Bean,修改返回类型后即可正常使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:55:16