异步处理导入文件

1,600 阅读1分钟

背景

业务需要导入Excel文件,同时还需对Excel内容进行处理。Excel文件可能会很大, 因此需要异步处理Excel文件,否则前端会出现超时问题。

实现方式

@Async标注的方法,在执行的时候,将会在独立的线程中执行。

//异步处理程序
@Async
void handle(MultipartFile file) throws IOException{
    
}

controller中文件接收:

public ResultBean importExcel(MultipartFile file) throws IOException {
    handle(file);
    return ResultBean.success();
}

但是遇到了一个问题,在导入文件处理时,会不时的出现如下报错,导致导入失败。

java.io.FileNotFoundException: /usr/local/tomcat8/work/Catalina/localhost/dm/upload_f4974065_aeff_4cf1_879f_86121e249773_00000002.tmp (No such file or directory)

经过一番搜索,查到原因:当controller中的方法return后,MultipartFile会被回收,同时还会删除保存在tomcat中的临时文件,导致在处理时,会出现找不到文件的错误。

解决方式:自定义一个临时文件夹,先把上传的文件保存到临时文件夹中,最后在处理完后,在finally中删除文件。