当前位置: 首页 > news >正文

关于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、内存或数据库连接),那么立即终止线程可能会导致资源浪费。因此,一些系统可能会选择让线程完成其当前的工作,然后优雅地关闭。

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SQLite3中的callback回调函数注意的细节
  • spring 技术100问?
  • python 导入excel空间三维坐标 生成三维曲面地形图 5-1、线条平滑曲面且可通过面观察柱体变化(一)
  • 华为OD机试 - 模拟数据序列化传输(Java JS Python C C++)
  • Python图像处理【22】基于卷积神经网络的图像去雾
  • js之继承
  • WebGL之灯光使用解析
  • 查询IP地址保障电商平台安全
  • [VulnHub靶机渗透] Nullbyte
  • Day16:HTTP协议、Spring MVC、Thymeleaf模版引擎、Spring处理浏览器请求实例(传入和传出)、MyBatis
  • Spring Boot中Excel数据导入导出的高效实现
  • Linux--基础命令
  • 在linux上部署yolov5和安装miniconda3
  • Nestjs与Vue实现多人聊天[简易版]
  • Java中的常见类“Math”(一)用法详解
  • 10个确保微服务与容器安全的最佳实践
  • Angular数据绑定机制
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • const let
  • CSS居中完全指南——构建CSS居中决策树
  • C语言笔记(第一章:C语言编程)
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Docker容器管理
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • KMP算法及优化
  • Laravel核心解读--Facades
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Mithril.js 入门介绍
  • Promise面试题2实现异步串行执行
  • SegmentFault 2015 Top Rank
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 聚簇索引和非聚簇索引
  • 前端临床手札——文件上传
  • 深度学习入门:10门免费线上课程推荐
  • 算法系列——算法入门之递归分而治之思想的实现
  • 为什么要用IPython/Jupyter?
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 小试R空间处理新库sf
  • Java数据解析之JSON
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​低代码平台的核心价值与优势
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #define用法
  • (09)Hive——CTE 公共表达式
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (19)夹钳(用于送货)
  • (8)STL算法之替换
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (多级缓存)多级缓存
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)原始图像数据和PDF中的图像数据
  • **PHP分步表单提交思路(分页表单提交)
  • .gitignore文件—git忽略文件
  • .gitignore文件使用