文档章节

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

奥特曼之王
 奥特曼之王
发布于 06/14 18:16
字数 624
阅读 22
收藏 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

共有 人打赏支持
奥特曼之王
粉丝 1
博文 71
码字总数 8768
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
今天
1
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
2
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
今天
1
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
今天
1
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部