关于springboot一个接口请求后,主动取消后,后端是否还在跑

1、最近在思考一个问题,如果一个springboot的请求的接口比较耗时,中途中断该请求后,则后端服务是否会终止该线程的处理,于是写了一个demo

复制代码
 @RequestMapping(value = "/test", method = RequestMethod.GET)
    public BasicResult downloadtest(Long jobId) {

        try {
            logger.info("请求开始,入参:{} ", jobId);
            Thread.sleep(60_000);
            logger.info("请求结束,入参:{} ", jobId);
            return BasicResult.success("处理成功" + jobId);
        } catch (Throwable t) {
            logger.error("接口异常,查询失败,user:{},原因:{},cause by: {}",UserInfoHolder.getUserOa(), t.getMessage(), t);
        }
    }

2、针对改接口进行http请求:

http://localhost:8082/test?jobId=34

3、打印日志如下:

4、发现即使取消请求后,springboot后端还是会进行业务处理,不会自动终止的。

后续总结:

当一个 Spring Boot 应用的请求接口比较耗时,并且客户端在请求中途中断(例如,通过关闭浏览器或发送一个 HTTP 取消请求),后端服务是否会终止该线程的处理取决于多个因素。

  1. 请求类型

    • 对于同步请求,如果客户端关闭了连接,服务器端的线程通常不会立即终止。因为服务器不知道客户端是否已经接收到响应,或者是否还有后续的数据需要发送。
    • 对于异步请求(例如使用 @Async 注解),情况可能有所不同。如果请求被中断,服务器可能会尝试取消任务,但这取决于异步任务的具体实现和取消策略。
  2. 服务器配置

    • 某些服务器配置(如 Tomcat)允许你设置连接超时时间。如果请求超过这个时间还没有完成,服务器可能会自动中断连接并停止处理。
    • 某些服务器或框架可能会提供特定的机制来检测中断的请求并尝试优雅地停止处理。
  3. 请求处理逻辑

    • 开发者编写的代码逻辑也会影响线程的处理。如果代码逻辑中有检测请求中断的逻辑(例如,通过检查请求的属性或异常),那么线程可能会在适当的时候停止处理。
    • 如果代码没有这样的逻辑,线程可能会继续执行,直到完成或遇到其他异常。
  4. 资源考虑

    • 即使请求被中断,如果线程已经消耗了大量资源(如 CPU、内存或数据库连接),那么立即终止线程可能会导致资源浪费。因此,一些系统可能会选择让线程完成其当前的工作,然后优雅地关闭。

总的来说,当客户端中断请求时,后端服务是否会终止线程的处理取决于具体的实现、配置和逻辑。为了处理这种情况,开发者可能需要编写额外的逻辑来检测请求的中断,并适当地停止线程的处理。此外,选择适当的服务器配置和框架也可以帮助管理这种情况。

相关推荐
bbq粉刷匠21 分钟前
HashMap 底层原理深度拆解(二):putVal 完整链路解析(懒加载 · 链表遍历 · 尾插法)
java·开发语言·哈希算法
Sam_Deep_Thinking29 分钟前
一个靠谱的C端网关服务应该包含什么内容
java·程序员·系统架构
杨运交1 小时前
[055][调度模块]Spring动态任务调度框架的设计与实现
java·后端·spring
白狐_7981 小时前
408 数据结构算法题 01:线性表暴力求解保分指南
java·数据结构·算法
流云鹤1 小时前
03Java学习day(3)
java·学习
tqs_123451 小时前
Agent智能体+Skill插件引擎+Milvus混合检索 技术沉淀
java·python·milvus
严同学正在努力2 小时前
从备份到恢复:我用 30 分钟恢复了误删的核心业务表
android·java·数据库·ai
QQ_21696290963 小时前
Spring Boot 养老院管理系统:从入住、护理到费用结算的全流程实现(源码可领)
java·spring boot·后端
cxoptics3 小时前
冰洲石分束器设计与应用
java
ck-joker3 小时前
M1 Pro跑LLM实测:Ollama+LangChain4j零成本本地大模型开发,比云端API快在哪?
java·语言模型