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

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://stackoverflow.com/questions/34852236/spring-boot-rest-api-request-timeout

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

在这里插入图片描述

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值