使用期货时,春季启动超时

时间:2018-12-06 11:20:25

标签: java spring spring-boot future

我正在使用Spring Boot 2.0.6.RELEASE版本

我有以下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返回类型并仅返回一个List,则代码可以正常工作。 我尝试了以下属性,但不幸的是没有成功。

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

有人知道我需要做什么才能解决此问题,并且仍然允许我返回Future类型吗?

谢谢 达米安

2 个答案:

答案 0 :(得分:1)

尝试将这两个属性设置为特定值,例如60或120。 另外,在主类中添加@EnableAsync,在方法中添加@Async

答案 1 :(得分:1)

没有用于非异步请求的超时设置,因此,当删除将来的返回类型时,异步请求将变为非异步请求,并且可以正常工作。

spring.mvc.async.request-timeout是异步请求的超时设置。

您可以将其设置为更大的数字,例如60000,或仅更改返回类型。

我不认为-1表示异步请求没有超时,实际上没有办法为异步请求设置无超时。