简介
Servlet3.0提供了基于servlet的异步处理api,Spring MVC只是将这些api进行了一系列的封装,从而实现了DeferredResult。
DeferredResult字面意思是"延迟结果",它允许Spring MVC收到请求后,立即释放(归还)容器线程,以便容器可以接收更多的外部请求,提升吞吐量,与此同时,DeferredResult将陷入阻塞,直到我们主动将结果set到DeferredResult,最后,DeferredResult会重新申请容器线程,并将本次请求返回给客户端。
使用
1. 监听器 onTimeout()
当deferredResult被创建出来之后,执行setResult()之前,这之间的时间超过设定值时(比如下方案例中设置为5秒超时),则被判定为超时。
DeferredResult<String> deferredResult = new DeferredResult<String>(5 * 1000L);
// 设置超时事件
deferredResult.onTimeout(() -> {
System.out.println("异步线程执行超时, 异步线程的名称: " + Thread.currentThread().getName());
deferredResult.setResult("异步线程执行超时");
});
2. 监听器 onError()
当onTimeout()或onCompletion()等回调函数中的代码报错时,则会执行监听器onError()的回调函数。
DeferredResult之外的代码报错不会影响到onError()。
DeferredResult<String> deferredResult = new DeferredResult<String

本文介绍了Servlet3.0的异步处理API在SpringMVC中的应用,特别是DeferredResult的使用,包括超时、错误处理和完成事件。通过例子展示了如何在实际场景中使用DeferredResult进行延迟返回结果。

2036

被折叠的 条评论
为什么被折叠?



