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

 更新时间:2026年05月24日 10:30:33   作者:台风-.-  
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);
    }
    //往下还可以写很多的异常统一处理方法.上面只是写了超时异常的处理,其它无关主题的省略了.
}

测试结果

返回友好的超时报错.

总结

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

相关文章

  • Java编程中使用JDBC API连接数据库和创建程序的方法

    Java编程中使用JDBC API连接数据库和创建程序的方法

    这篇文章主要介绍了Java编程中使用JDBC API连接数据库和创建程序的基本教程,JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问需要的朋友可以参考下
    2015-12-12
  • springboot 获取访问接口的请求的IP地址的实现

    springboot 获取访问接口的请求的IP地址的实现

    本文主要介绍了springboot获取访问接口的请求的IP地址的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 细数java for循环中的那些坑

    细数java for循环中的那些坑

    这篇文章主要介绍了Java for循环方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-07-07
  • Spring Cloud Gateway使用Token验证详解

    Spring Cloud Gateway使用Token验证详解

    这篇文章主要介绍了Spring Cloud Gateway使用Token验证详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • Java中ScheduledExecutorService介绍和使用案例(推荐)

    Java中ScheduledExecutorService介绍和使用案例(推荐)

    ScheduledExecutorService是Java并发包中的接口,用于安排任务在给定延迟后运行或定期执行,它继承自ExecutorService,具有线程池特性,可复用线程,提高效率,本文主要介绍java中的ScheduledExecutorService介绍和使用案例,感兴趣的朋友一起看看吧
    2024-10-10
  • Java枚举与.net枚举区别详解

    Java枚举与.net枚举区别详解

    这篇文章主要介绍了Java枚举与.net枚举区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 浅谈Java变量的初始化顺序详解

    浅谈Java变量的初始化顺序详解

    本篇文章是对Java变量的初始化顺序进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • IDEA创建Maven项目一直显示正在加载的问题及解决

    IDEA创建Maven项目一直显示正在加载的问题及解决

    这篇文章主要介绍了IDEA创建Maven项目一直显示正在加载的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • java8 LocalDate 使用详解

    java8 LocalDate 使用详解

    这篇文章主要介绍了java8 LocalDate 使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Struts1和struts2的区别_动力节点Java学院整理

    Struts1和struts2的区别_动力节点Java学院整理

    这篇文章主要为大家详细介绍了Struts1和struts2的区别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09

最新评论