java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > springboot接口超时配置及异常处理

springboot接口超时配置过程及异常处理方式

作者:台风-.-

SpringBoot控制接口超时设置三步曲:配置、接口定义与异常处理,掌握超时时间配置、异步处理及统一异常处理策略,确保接口高效稳定运行

SpringBoot控制接口超时设置

超时三部曲:

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);
    }
    //往下还可以写很多的异常统一处理方法.上面只是写了超时异常的处理,其它无关主题的省略了.
}

测试结果

返回友好的超时报错.

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文