public String handle(Function, WebPortalMessageWrapper> processor, Consumer emailSendHandler) { CompletableFuture future = CompletableFuture.supplyAsync(() -> { long start = System.currentTimeMillis(); xxx x = processor.apply(xxx); if (System.currentTimeMillis() - start >= UPLOAD_TIMEOUT * 1000) { // send email (success or fail) emailSendHandler.accept(x); log.warn("Timeout when call TimeoutHandler.handler sub thread - {}", UPLOAD_TIMEOUT); return TIMEOUT_MESSAGE; } return x; }, taskExecutor).exceptionally(e -> { log.error("Error when call TimeoutHandler.handler sub thread, error={}", e.getMessage(), e); // send failure email emailSendHandler.accept(e.getMessage()); return String.format(STATUS_FAILED_MESSAGE, e.getMessage()); }); try { return future.get(UPLOAD_TIMEOUT, TimeUnit.SECONDS); } catch (TimeoutException e) { log.warn("Timeout when call TimeoutHandler.handler"); return TIMEOUT_MESSAGE; } catch (Exception e) { log.error("Error when call TimeoutHandler.handler, error={}", e.getMessage(), e); // send failure email emailSendHandler.accept(e.getMessage()); return String.format(STATUS_FAILED_MESSAGE, e.getMessage()); } } @PostMapping(value = "xxx", produces = "application/json;charset=UTF-8") @ResponseBody public String saveTemplateData(xxx) { return timeoutHandler.handle( (emailSendHandler) -> this.saveTemplateData(xxx), (result) -> timeoutHandler.sendEmail(result, x)); } springbootjavaemailAPI超时之前返回结果超时异常发邮件 相关 JavaWeb的三大作用域 java中常用数组copy方法 6.Java方法 Java web开发:从零到 Run 一个现有的 Spring Boot 前后端分离项目(前端Vue) javascript基础知识(29) 实现继承的方式 java 正则表达式 JAVA List<Object[]>取值问题 初次接触Java感受 99乘法表 java for循环 基于java.net.socket包的对象传递 Idea Java项目文件夹后面提示百分数怎么去掉 Java8新特性 标签