Spring 使用 Futures 时启动超时
Spring Boot Timeout when using Futures
我正在使用 Spring 引导版本 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响应returns
{
"timestamp": 1544094968149,
"status": 503,
"error": "Service Unavailable",
"message": "No message available",
"path": "/searchData"
}
getSearchData() 方法继续执行并最终在日志中显示为完成。
如果我删除 Future return 类型而只是 return 一个 List - 代码工作正常。
我尝试了以下属性,但不幸的是没有成功。
spring.mvc.async.request-timeout=-1
server.connection-timeout=-1
有谁知道我需要做什么才能解决这个问题并仍然允许我 return Future 类型?
谢谢
达米安
尝试将这两个属性设置为特定值,例如 60 或 120。
另外将 @EnableAsync
添加到您的主要 class 并将 @Async
添加到您的方法。
非异步请求没有超时设置,所以当你去掉future return类型时,异步请求就变成了非异步请求,就可以正常工作了。
spring.mvc.async.request-timeout
是异步请求的超时设置。
您可以将其设置为更大的数字,例如 60000,或者只更改 return 类型。
我不认为-1
意味着异步请求没有超时,实际上没有办法为异步请求设置没有超时。
我正在使用 Spring 引导版本 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响应returns
{
"timestamp": 1544094968149,
"status": 503,
"error": "Service Unavailable",
"message": "No message available",
"path": "/searchData"
}
getSearchData() 方法继续执行并最终在日志中显示为完成。 如果我删除 Future return 类型而只是 return 一个 List - 代码工作正常。 我尝试了以下属性,但不幸的是没有成功。
spring.mvc.async.request-timeout=-1
server.connection-timeout=-1
有谁知道我需要做什么才能解决这个问题并仍然允许我 return Future 类型?
谢谢 达米安
尝试将这两个属性设置为特定值,例如 60 或 120。
另外将 @EnableAsync
添加到您的主要 class 并将 @Async
添加到您的方法。
非异步请求没有超时设置,所以当你去掉future return类型时,异步请求就变成了非异步请求,就可以正常工作了。
spring.mvc.async.request-timeout
是异步请求的超时设置。
您可以将其设置为更大的数字,例如 60000,或者只更改 return 类型。
我不认为-1
意味着异步请求没有超时,实际上没有办法为异步请求设置没有超时。