前言
- Servlet 3.0之前:HTTP请求由单一线程处理。
- Servlet 3.0之后:支持异步处理,提高系统吞吐量。
SpringBoot 异步接口实现方式
- AsyncContext:Servlet层级,不常用。
- Callable:使用
java.util.concurrent.Callable
。 - WebAsyncTask:Spring封装的
Callable
,提供回调功能。 - DeferredResult:延迟结果设置,适用于结果生成可能在其他线程。
Callable 实现
- Controller返回:
Callable<String>
。 - 处理过程:
- Spring MVC调用
request.startAsync()
。 - 使用
AsyncTaskExecutor
在单独线程处理。 - 释放Servlet容器线程,保持response状态。
- Callable结果产生后,请求返回Servlet容器完成处理。
- Spring MVC调用
WebAsyncTask 实现
- 特点:提供超时、错误和完成回调。
- 示例:
@GetMapping("/webAsyncTask") public WebAsyncTask<String> webAsyncTask() { WebAsyncTask<String> result = new