Spring启动异步控制器

时间:2018-02-20 10:01:35

标签: java ajax spring

我有这个帖子方法:

 @PostMapping("/upload")
        public String singleFileUpload(@RequestParam("file") MultipartFile file,RedirectAttributes redirectAttributes)
                throws IOException {
    ExecutorService service= Executors.newSingleThreadExecutor();
            Future<String> future=service.submit(new Callable<String>() {
                @Override
                public String call() throws Exception {
                    //parse file
                    Thread.sleep(5000);
                    return "done";
                }
            });
    String result=future.get();
     service.shutdown();
    return "redirect:uploadState";
    }

我想重定向到uploadState,而执行程序解析我的文件,并且uploadState有长轮询ajax来通知解析是否完成。可以帮我提一些提示。

1 个答案:

答案 0 :(得分:1)

此处future.get()是阻止者。

您可以使用Java 8 CompletableFuture:

CompletableFuture.supplyAsync(() -> {
    try{
   Thread.sleep(5000);
   return "done";
 }catch(Exception ex){}
}).thenApply((res->)->{
  return res;
});

它不会阻止你的控制。