controller提前响应前台---后期慢慢运行其他逻辑
									 
今天遇到这样一个问题
使用response返回响应
				 
				
controller中有一个非常复杂
    且非常耗时的业务,
	这样就会导致方法运行超时
那么有没有一种方法,使Controller提前响应客户端
同时后台的业务逻辑,让她慢慢的自己去跑
实现方法:
    1.借助response方法向客户端写入响应的信息,然后关闭写入流,提前返回
	    或
	2.采用线程的方式运行业务逻辑方法,也可以实现提前返回
例:使用response返回响应
@PostMapping("/test1")
public Object testController(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("/test2")
public Object testController2(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;
}
 									
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

 
			 
                
                
                
               
 
          

