controller返回响应后,继续执行其他逻辑
通过response返回响应@PostMapping("/test/1")public Object earlyReturn(HttpServletRequest request, HttpServletResponse response) throws Exception {JSONObject resp = new JSONObject();resp.put("uri", request.ge
·
通过response返回响应
@PostMapping("/test/1")
public Object earlyReturn(HttpServletRequest request, HttpServletResponse response) throws Exception {
JSONObject resp = new JSONObject();
resp.put("uri", request.getRequestURI());
resp.put("url", request.getRequestURL());
//设置响应报文为json格式
response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
PrintWriter out = response.getWriter();
out.print(resp.toString());//设置响应报文
out.close();//强制返回
System.out.println("http响应已返回 " + System.currentTimeMillis());
System.out.println("响应返回后,可以继续执行其他逻辑..." + System.currentTimeMillis());
Thread.sleep(3000);//模拟耗时
System.out.println("执行完毕 " + System.currentTimeMillis());
return null;
}
通过线程执行耗时逻辑
进一步优化则可通过线程池执行逻辑
@PostMapping("/test/2")
public Object earlyReturn2(HttpServletRequest request, HttpServletResponse response) throws Exception {
JSONObject resp = new JSONObject();
resp.put("uri", request.getRequestURI());
resp.put("url", request.getRequestURL());
System.out.println("创建新线程去执行其他逻辑,不会阻塞当前请求");
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("新线程内逻辑执行..." + System.currentTimeMillis());
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("执行完毕 " + System.currentTimeMillis());
}
}).start();
System.out.println("http响应返回 " + System.currentTimeMillis());
return resp;
}
更多推荐
所有评论(0)