首页 > 其他分享 >分享遇到的异步问题合集

分享遇到的异步问题合集

时间:2024-07-22 10:25:05浏览次数:15  
标签:异步 调用 解析 文件 方法 使用 分享 合集

1.异步传输文件,解析时报错文件未找到

场景:异步上传excel文件并需要解析时,在执行到代码中使用流时报错文件未找到

原因:因为解析文件的时候并没有存到本地而是作为临时文件在内存中解析,使用异步立即返回的时候,也把临时文件删除了,所以使用流的时候,他找不到流对应路径下的文件

解决:将流接收到后,转byte数组进行传递而不是MultipartFile直接传递,最后在使用流的时候在将byte转换成流

参考代码

InputStream inputStream = file.getInputStream();

byte[] bytes = IOUtils.toByteArray(inputStream);

InputStream inputStream = new ByteArrayInputStream(bytes);

2. 在当前类调用异步方法失效

场景:在系统中使用异步上传excel文件解析数据时,页面上还是一直等待解析完成没有立即收到返回结果

原因:源码中使用异步必须要代理包装对象调用,直接调用方法无法触发代理对象方法调用,必须指明对象来调用方法

解决:

1. 放在另一个类中调用

2. 在本类使用的话 可以用springUtil的getBean方法获取当前类的bean,通过返回的bean来调用异步方法,例:

package cn.hutool.extra.spring;

BatchAdjuApplyService bean = SpringUtil.getBean(BatchAdjuApplyService.class);

3.异步请求导致request-请求头丢失

场景:发送请求到控制层,在控制层调用异步方法时,异步方法获取request为null

原因:因为使用异步时,是另开了个子线程,而request信息是在主线程里面,所以异步线程里面没有请求头信息

解决:

1.最简单的方法将请求头直接拿出来作为参数调用

2.通过配置将请求头带给异步线程

4.@Async异步注解引起数据变化但未来的及持久化到数据库

场景:断点打到异步代码中的插入或修改一条数据(mybatis),发现数据库没有立即发生改变

猜测:可能是没有被持久化或是没有提交事务到数据库层,但是后续代码逻辑不影响因为默认读已提交只是没持久化到数据库,应该是因为异步的执行顺序逻辑

备注:这个问题定义其实有点模糊,当时没有太在意,后面也没遇到类似的

5.正常使用异步注解,但是异步依然失效

场景:在系统审核某笔订单时,页面上一直转圈导致前端页面和网关定义的超时了

原因:因为发现这个项目是第一次使用异步注解,还需要在启动类加上@EnableAsync,但是不加也不会报错,这种问题感觉有点框架上的bug,启动的时候没有检测出来,也没注意启动日志是否有警告日志,如果想确定异步是否生效,可以让异步里面的方法主线程睡几十秒,看有没有等待 如果等待了说明没有生效,没有等待说明异步是正常的

解决:在启动类加上@EnableAsync即可

ps:后续会陆续更新分享开发实际遇到的问题与技术探讨,如果觉得有帮助的,可以点赞收藏支持支持

标签:异步,调用,解析,文件,方法,使用,分享,合集
From: https://blog.csdn.net/wrxfxdd/article/details/140543001

相关文章

  • 分享:大数据信用报告查询平台哪个好?
    大数据信用也就是我们常说的大数据,相信很多朋友对这个词都不陌生,特别是在银行申贷的时候,听过比较多,因为在银行做信用贷款的时候都会审查申贷人的大数据信用,贷前提前了解自己的大数据很有必要,那大数据信用报告查询平台哪个好呢?本文就通过以下几点简单的介绍,一起看看去吧。优......
  • 免费分享一套SpringBoot+Vue高校心理咨询(心理教育辅导)系统【论文+源码+SQL脚本】,帅
    ​大家好,我是java1234_小锋老师,看到一个不错的SpringBoot+Vue高校心理咨询(心理教育辅导)系统,分享下哈。​项目视频演示【免费】SpringBoot+Vue高校心理咨询(心理教育辅导)系统Java毕业设计_哔哩哔哩_bilibili项目介绍随着Internet技术的发展,心理教育辅导系统应运而生,心......
  • vue3 Promise处理异步操作的对象
    Promise是JavaScript中用于处理异步操作的一种对象。它代表了一个异步操作的最终完成(或失败)及其结果值。在处理异步操作时,Promise提供了一种更干净、更可读的方式来管理回调函数。Promise的状态一个Promise对象有三种状态:Pending(进行中):初始状态,操作尚未完成。Fulfille......
  • 经验分享|大数据信用风险评估怎么做?
    随着数字化时代的来临,大数据技术正在重塑信用风险评估的方式。不再依赖传统的主观判断和有限数据,现代的信用评估通过大数据的广泛应用,使得风险评估变得更加客观、准确和高效。数据的多元来源与整合首要任务是从多元化的数据来源中收集信息,这些数据可以包括个人......
  • 意得辑润色体验分享
    五月收到返稿意见,提示语言太差,需要润色,于是向周围伙伴们打听了是给润色公司还是别的润色软件润色比较好。得出的结论是,如果需要稳妥一点,还是找专门的润色机构,在返稿的时候,附上润色证明,更有说服力。于是权衡利弊,使用了意得辑。总体使用感受:还不错。润色完,返回来有总结好的文章......
  • 超详细Python教程——异步任务和定时任务
    异步任务和定时任务在Web应用中,如果一个请求执行了耗时间的操作或者该请求的执行时间无法确定,而且对于用户来说只需要知道服务器接收了他的请求,并不需要马上得到请求的执行结果,这样的操作我们就应该对其进行异步化处理。如果说使用缓存是优化网站性能的第一要义,那么将耗时......
  • 分享6个AI一键生成PPT的工具【国内最新】
    一、引言PPT(PowerPoint演示文稿)在商业演示、教育授课以及各种演讲中扮演着关键角色。然而,制作一份既吸引人又能有效传递信息的PPT并不是一件容易的事。幸运的是,随着人工智能技术的发展,现在有一些免费的AI工具可以帮助你轻松地一键生成PPT,让整个设计过程变得更加简单和有趣......
  • 猫头虎 Python知识点分享:pandas--read_csv()用法详解
    ......
  • SSM 美食食谱分享推荐小程序 毕业设计-附源码68509
    摘要本论文主要论述了如何使用SSM框架开发一个美食食谱分享推荐小程序,将严格按照软件开发流程进行各个阶段的工作,采用B/S架构JAVA技术,面向对象编程思想进行项目开发。在引言中,作者将论述美食食谱分享推荐小程序的当前背景以及系统开发的目的,后续章节将严格按照软件开发流......
  • UART协议详解:异步串行通信的原理与应用
    UART(UniversalAsynchronousReceiver/Transmitter)协议是一种用于异步串行通信的标准,允许数据在两个设备之间通过串行总线进行双向传输。UART的设计目的是将并行数据转换为串行格式,以便通过一对导线(或无线链路)进行传输,然后再在接收端将串行数据转换回并行格式。UART的关键......