文档章节

多文件上传、excel多文件导入(大量数据)

奥特曼之王
 奥特曼之王
发布于 06/14 18:16
字数 624
阅读 32
收藏 0
多文件上传、excel多文件导入(大量数据)
置顶2018年03月02日 14:52:32

阅读数:436

问题:多个excel文件导入(上传)

思路:由于文件选择只能单个文件选择,那么可以将excel文件一个一个上传到本地或服务器,将路径保存至数据库中,后台使用队列进行操作,即上传第一个文件时便在后台开启一条线程,注意是只开启一条如果多条会导致死锁等各种问题,开启线程后,将陆续上传的文件加入队列中,只要队列中有数据就不结束线程,直到队列中的数据全部执行完也就是前端上传的文件全部导入到数据库中就结束线程。前端提供进度条。即能上传大量数据又不影响前端页面的操作,只需查看进度条即可知道数据上传量。

效果图片:



后台实现代码:

1、将上传的文件一个个加入队列中

首先将所有上传文件存到本地或者服务器,将路径存储到数据库

String filePath = fileService.upload(FileInfo.FileType.file, file, true, null); ImportLog importLog = importLogService.putDownTask(total, file.getOriginalFilename(), filePath); importSubject.addTask(importLog);

再讲一个个存到数据库中的文件路径放到队列中。addTask();方法如下

@Resource(name = "productImportSubscriber") private ImportSubscriber importSubscriber; @Resource(name = "taskExecutor") private ThreadPoolTaskExecutor threadPool;

@Resource(name = "importEvent") private ImportEvent importEvent;

public void addTask(ImportLog importLog) { importSubscriber.add(importLog); if (!importEvent.isRunning()) { threadPool.execute(new Runnable() { @Override public void run() { importSubscriber.start(); } }); } }

判断isRunning是否在启动,所有每次只有一个文件在导入,并不会出现其他资源争抢的情况。

_/** _ * _观察者接口 _ */ public interface ImportSubscriber {

Boolean start();

**void** add(ImportLog importLog);

}

实现ImportSubscriber接口:

public static Queue queue = new LinkedList<>();

@Override public Boolean start() { importData();//此处就可以处理不同系统的业务逻辑,比如导入数据 return true; }

@Override public void add(ImportLog importLog) { queue.add(importLog); }

到这里多文件导入就结束了,从全局看,这种方式只是比较巧妙了运用了队列。比如如果你要导入一个excel文件,有100W+的数据,那么前端

会非常慢,导致那个页面除了一直导入以外什么事也做不了,那么用户体验就非常差,而这里是先将文件存储起来,

在后台慢慢执行,而前端只是给了一个进度条,可以告知用户什么时候能导入完。

 

本文转载自:https://blog.csdn.net/zhangcc233/article/details/79421783

共有 人打赏支持
下一篇: JSON解析
奥特曼之王
粉丝 1
博文 74
码字总数 10294
作品 0
郑州
私信 提问
在Web界面中实现Excel数据大量导入的处理方式

在早期Bootstrap框架介绍中,我的随笔《结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程》中介绍了利用Bootstrap FieInput插件上传...

伍华聪
08/31
0
0
导入excel文件处理流程节点的解决方案

在没用管理系统的时候,很多企业都会将一些生产或流水线操作的数据保存在excel文件中,按名称或按sheet页形成多份excel的表格数据。 当运用了工作流管理系统后,这些生产或流水线的操作都会记...

长平狐
2012/10/11
49
0
结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程

1、bootstrap-fileinpu的简单介绍 在前面的随笔,我介绍了Bootstrap-table表格插件的具体项目应用过程,本篇随笔介绍另外一个Bootstrap FieInput插件的使用,整合两者可以实现我们常规的Web...

walb呀
2017/12/04
0
0
已经重写,源码和文章请跳转http://www.cnblogs.com/ymnets/p/5621706.html

文章由于写得比较仓促 已经重写,源码和文章请跳转 http://www.cnblogs.com/ymnets/p/5621706.html 系列目录 前言: 导入导出实在多例子,很多成熟的组建都分装了导入和导出,这一节演示利用...

文艺小青年
2017/07/07
0
0
将excel的数据导入到db2数据库

最近,在做一个移植的项目,其中有一个需求是:把数据仓库中的数据导入我们系统的数据库中。 背景:从数据仓库中取得数据,是以excel表格存在的。 将xls 文件另存为以csv格式的文件,test.xl...

pumpkin555
2014/04/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS 安装PHP5和PHP7

安装PHP5 下载解压二进制包 [root@test-a src]# cd /usr/local/src/[root@test-a src]# wget http://cn2.php.net/distributions/php-5.6.32.tar.bz2[root@test-a src]# tar jxvf php-5.6......

野雪球
今天
4
0
windows上类似dnsmasq的软件Dual DHCP DNS Server

官网地址:http://dhcp-dns-server.sourceforge.net/官网定向的下载地址:https://sourceforge.net/projects/dhcp-dns-server/files/ 设置参考地址:http://blog.51cto.com/zhukeqiang/18264......

xueyuse0012
今天
3
0
LinkedHashMap源码解析

前言 HashMap中的元素时无序的,也就是说遍历HashMap的时候,顺序和放入的顺序是不一样的。 如果需要有序的Map,就可以采用LinkedHashMap. LinkedHashMap通过维护一个包含所有元素的双向链表,...

grace_233
今天
4
0
初识flask

文档 0.10.1版本 http://www.pythondoc.com/flask/index.html 1.0.2版本 https://dormousehole.readthedocs.io/en/latest/ 安装flask $ pip3 install flaskCollecting flask Downloading......

yimingkeji
昨天
6
0
Akka系统《sixteen》译

Actor是一个封装状态(state)和行为(behavior)的对象,它们只通过交换消息通信(放入收件人邮箱的邮件)。从某种意义上说,Actor是最严格的面向对象编程形式,但它更适合将他们视为人:在与Act...

woshixin
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部