DeferredResult的超时处理,采用委托机制,也就是在实例DeferredResult时给予一个超时时长(毫秒),同时在onTimeout中委托(传入)一个新的处理线程(我们可以认为是超时线程);当超时时间到来,DeferredResult启动超时线程,超时线程处理业务,封装返回数据,给DeferredResult赋值(正确返回的或错误返回的)。
这个实例可以对上一个实例的代码稍作改动即可。
一、增加超时处理任务TimeOutWork
package com.example;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.context.request.async.DeferredResult;
public class TimeOutWork implements Runnable{
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private DeferredResult<ResponseMsg<String>> deferredResult;
public TimeOutWork(DeferredResult<ResponseMsg<String>> deferredResult) {
this.deferredResult = deferredResult;
}
@Override
public void run() {
logger.debug("我超时啦!");
ResponseMsg<String> msg = new Res