使用futures时spring启动超时

3okqufwl  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(360)

我使用的是springboot2.0.6.0版本
我有以下api方法

@RequestMapping(value = "/searchData", produces = { MediaType.APPLICATION_JSON_VALUE }, method = RequestMethod.GET)
public Future<List<DataEntryBean>> getSearchData() {

    return CompletableFuture.supplyAsync(() -> {

        List<DataEntryBean> dataList = dataService.getSearchData();

        return dataList;
    });
}

getsearchdata方法运行大约需要40秒。30秒后,我的代码超时,日志中显示以下消息:

Resolved [org.springframework.web.context.request.async.AsyncRequestTimeoutException]

下面的json响应返回

{
  "timestamp": 1544094968149,
  "status": 503,
  "error": "Service Unavailable",
  "message": "No message available",
  "path": "/searchData"
}

getsearchdata()方法继续执行,并最终在日志中显示为已完成。如果我删除future返回类型并只返回一个列表,那么代码就可以正常工作了。我尝试了以下属性,但不幸没有成功。

spring.mvc.async.request-timeout=-1
server.connection-timeout=-1

有没有人知道我需要做些什么来解决这个问题,并且仍然允许我返回一个未来的类型?
谢谢你,达米恩

ndasle7k

ndasle7k1#

尝试将这两个属性设置为特定值,如60或120。额外添加 @EnableAsync 去你的主要班级 @Async 你的方法。

inkz8wg9

inkz8wg92#

对于非异步请求没有超时设置,因此当您删除将来的返回类型时,异步请求将变为非异步请求,并且工作正常。 spring.mvc.async.request-timeout 是异步请求的超时设置。
您可以将其设置为更大的数字,例如60000,或者只更改返回类型。
我不这么认为 -1 意味着异步请求没有超时,实际上没有办法设置异步请求没有超时。

相关问题