无意间发现spring可以通过DeferredResult实现请求延时返回,当客户端请求的时候,可能数据还没准备好或者需要等待其它业务,这时候我们可以使用DeferredResult,等数据准备好的时候在返回。示例如下:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.async.DeferredResult;
@RestController
public class TestDeferredResultController {
@GetMapping("/getDeferredResult")
public DeferredResult test(){
DeferredResult deferredResult=new DeferredResult(6000l,"timetout");
new Thread(){
public void run(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
deferredResult.setResult("delay result"+i);
}
}.start();
return deferredResult;
}
}
在实际业务中,我们可以根据业务在合适的地方执行 deferredResult的setResult方法。如果我们自己实现,可能需要我们通过循环或者监听的方式来实现,有了DeferredResult 实现起来就相对简单了。
网友评论