分享

springboot接口超时配置  及 异常处理

 极风狼 2022-07-06 发布于海南

SpringBoot控制接口超时设置:

超时三部曲 1.配置 2.接口定义 3. 异常处理

1.配置

提示:springboot项目设置接口超时时间(基本配置)

spring:
  mvc:
    async:
      request-timeout: 2000 //单位是毫秒哦 2000代表2秒

配置不好用? 继续往下看啊

提示:如果想让配置生效,需要符合此配置对应的接口规范.


2.接口定义

提示:首先是异步的,需要单独开一个线程去执行.第二需要的返回值的是Callable<泛型>,泛型中是你真正要返回的数据类型.

/**
 * 设置超时用的测试接口.通常如下写法
 *
 * @return 返回值一定是Callable<T>的.
 */
@GetMapping("/test")
public Callable<ResultVO> timeOutMethod() {
    //new Callable<> 单独开启一个线程去执行
    return new Callable<ResultVO>() {
        @Override
        public ResultVO call() throws Exception {
            //这里将会触发超时
            Thread.sleep(10000); 
            //正常返回逻辑
            return ResultVO.response(ReturnEnum.PAY_TOP_UP_ORDER, String.valueOf(new IdWorker().nextId()));
        }
    };
}

3.异常处理

提示:捕获AsyncRequestTimeoutException异常,进行统一的处理.

@ControllerAdvice //所有的Controller都会进入到这个类?
public class BaseExceptionAdvice {

    @ExceptionHandler(AsyncRequestTimeoutException.class)
    public ResponseEntity<JSONObject> handException(AsyncRequestTimeoutException e) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("timestamp", DateTime.now().toString("yyyy-MM-dd HH:mm:ss"));
        jsonObject.put("status", 500);
        jsonObject.put("message","接口超时");
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(jsonObject);
    }
    //往下还可以写很多的异常统一处理方法.上面只是写了超时异常的处理,其它无关主题的省略了.
}

测试结果

返回友好的超时报错.
在这里插入图片描述

还不明白?

看看这篇文章吧,需要自己用翻译器翻译一下https:///questions/34852236/spring-boot-rest-api-request-timeout

这个问题是工作时一个朋友遇到的,然后就问我了,我就去查阅资料了.

在这里插入图片描述

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约