@RestController public class AsyncController { private static final Logger logger = LoggerFactory.getLogger(AsyncController.class); private static AtomicInteger ai = new AtomicInteger(); @Autowired private UserQueryService userQueryService; ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(10); @RequestMapping("async1") public DeferredResult async1(ModelMap modelMap) { final int idx=ai.getAndIncrement(); logger.info("async1:{} enter", idx); String str = userQueryService.query("xxxx"); if (str.equals("fail")) { DeferredResult deferredResult = new DeferredResult<>(); scheduledExecutorService.schedule(new Runnable() { @Override public void run() { String result = userQueryService.query("xxxx"); logger.info("async1:{} leave",idx); deferredResult.setResult(result); } }, 10, TimeUnit.SECONDS); return deferredResult; } else { DeferredResult deferredResult = new DeferredResult<>(); deferredResult.setResult(str); return deferredResult; } } }