调用接口时,如果后台需要处理的时间过长,需要采取异步处理,先把结果返回给前台。
1、原生的
接口定义:
@RequestMapping(value="/test")publicObject test(){
MyExecutor myExecutor= newMyExecutor();try{
myExecutor.work();
}catch(Exception e) {
System.out.println("myExecutor.work()"+e.getMessage());
}
System.out.println("返回结果: "+newDate());return "成功";
}
业务执行:
importjava.util.Date;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;public classMyExecutor {private ExecutorService executor =Executors.newCachedThreadPool() ;public void work() throwsException {
executor.submit(newRunnable(){public voidrun() {try{
System.out.println("开始处理业务。。。 "+newDate());
Thread.sleep(5000);
System.out.println("业务结束。。。 "+newDate());
}catch(Exception e) {
System.out.println(e.getMessage());
}
}
});
}
}
控制台输出:
返回结果: Sat Jul 27 09:28:33 GMT+08:00 2019开始处理业务。。。 Sat Jul27 09:28:33 GMT+08:00 2019业务结束。。。 Sat Jul27 09:28:38 GMT+08:00 2019
2、在springboot 中使用
controller层
@RequestMapping(value="/async2")publicObject testAsync2(){System.out.println(1111);
userService.testAsync();
System.out.println(12);return "asdfas"