背景

公司要求做一个数据统计类的功能,大概就是由每个地方采集数据用excel进行导入,根据地方大小每个文件的数量可能在10万-100万之间不等,导入时要求对每个字段进行校验,可能存在的规则有非空判断,时间格式判断,长度判断,手机号这类正则表达式类校验,文件有多个sheet,每个sheet对应一个表,对应的数量不确定但是不会重复表,有个别sheet需要前面sheet的字段判断。

如果数据有错的,要求在后面新加一列告诉用户错误的原因,正确的数据也要输出一遍(不理解客户的想法。。。),未来有可能会开新sheet单独列出错误的每条数据和错误内容。

最终版本分为单机版和web版,单机版让某些安全要求高的用户用,web版全国通用。

web版作为一个微服务项目提供接口道原来做的信息管理平台。

思路

由于web版可以采用的功能更丰富,如补充机制,定时任务,后台MQ异步数据处理等等,这里只谈谈单机版的demo思路。

遇到这类情况首先传统poi方式是行不通的,不过poi也有自己的事件监听机制,这里和EasyExcel是一样的,每一行一行的读取。

1.因为EasyExcel不支持多并发写入,所以这里采用了读、写,数据库插入并发操作。

2.校验规则由注解实现,启动时将需要校验的实体类扫描并存到一个容器里,读取每行数据时根据注解上的内容进行校验

3.本次尝试用非阻塞形式实现,因此出现大量的循环......需要注意的有主线程等待超时问题,子线程及时跳出循环问题,有错误数据及时停止数据库线程

4.子线程若执行时间过长也需要及时中断,防止出现线程死锁问题

老版本demo:https://download.csdn.net/download/bibiboyx/12897555

EasyExcel 并发读取文件字段并进行校验,数据写入到新文件,批量插入数据到数据库相关推荐

  1. JDBC学习总结(二)JDBC操作Blob类型字段高效的批量插入JDBC处理数据库事务将多个SQL看成一个事务执行数据库连接池C3P0DBCPDruidDBUtils工具类实现CRUD

    JDBC学习总结(二)JDBC操作Blob类型字段/高效的批量插入/JDBC处理数据库事务/将多个SQL看成一个事务执行/数据库连接池C3P0/DBCP/Druid/DBUtils工具类实现CRUD ...

  2. java数据存入txt_java将数据写入到txt文件中(txt有固定的格式)

    java将数据写入到txt文件中,这个应该对于学过java I/O的人来说是很简单的事情了,但是如果要将数据以固定的格式写入到txt文件中,就需要一定的技巧了. 这里举个简单的例子,以供参考: 比如我 ...

  3. bin文件数据处理,读取一个文件数据写入另一个文件中

    C程序读取一个Bin文件数据,然后存入另一个Bin文件 最近工作遇到需要bin文件数据处理,对程序语言其实不大熟悉,还是凭着一些浅显的C语言基础,各种折磨一天时间才实现了工作需求,好了,废话不多说,直 ...

  4. python创建csv文件并写入-Python数据写入csv格式文件

    (只是传递,基础知识也是根基) Python读取数据,并存入Excel打开的CSV格式文件内! 这里需要用到bs4,csv,codecs,os模块. 废话不多说,直接写代码!该重要的内容都已经注释了, ...

  5. hive分区用2个字段有何限制_关于Hive使用动态分区插入数据详解

    1.创建一个单一字段分区表 hive>  create table dpartition(id int ,name string ) partitioned by(ct string  ); 2 ...

  6. c向文件中插入数据_Redis从文件中批量插入数据

    简介 在redis中,有时候需要批量执行某些命令,但是在redis的redis-cli下,只能一条条的执行指令,实在太麻烦了! 想到这,你是不是蓝瘦香菇? 如果能将要执行的指令一行行存储到文件中,然后 ...

  7. Python数据写入csv格式文件

    (只是传递,基础知识也是根基) Python读取数据,并存入Excel打开的CSV格式文件内! 这里需要用到bs4,csv,codecs,os模块. 废话不多说,直接写代码!该重要的内容都已经注释了, ...

  8. 用ado把excel数据写入oracle,如何将excel表格数据导入到oracle数据库对应的表中?!oracle导出excel文件...

    如何把excel里的表导入到oracle里 使用第三方工具吧,toad之类的 一个excel表格中有多个sheet,如何将其导入oracle数据库 户和要用DBA 最简单得建用户: create us ...

  9. 创建文件 c语言,汇编语言CreateFile函数:创建新文件或者打开已有文件

    函数 CreateFile 可以创建一个新文件或者打开一个已有文件.如果调用成功,函数返回打开文件的句柄:否则,返回特殊常数 INVALID_HANDLE_VALUEO 原型如下: CreateFil ...

  10. java bmp rgb数组_将RGB数据写入BMP位图文件

    CFile file; //定义一个文件对象 _ASSERTE(file.Open(CString("E:\\94.bmp"), CFile::modeRead));//打开文件 ...

最新文章

  1. android gridview 停止滚动
  2. 数据库:计算地球上两个坐标点之间里程
  3. leetcode842. 将数组拆分成斐波那契序列(回溯)
  4. Jenkins安装部署篇
  5. SSH远程管理OpenSSH使用
  6. ASP静态HTML(局部)生成类
  7. 2017.10.13 轮状病毒 失败总结
  8. java 显示服务器的图片,【JavaWeb】实现读取本地服务器路径下的图片
  9. 细数魅族metal电信版手机3宗罪。
  10. 关于CUDA中cutil的一些问题
  11. Javascript面向对象之私有静态变量
  12. 随手记---Pharming
  13. react-native windows下环境搭建和现阶段开发测试问题汇总(持续更新)
  14. Hive微博数据统计分析
  15. 3.SPSS Modeler数据基本分析笔记
  16. office 打开wps乱_wps打开word的乱码咋办?
  17. 个人价值:个人价值冰山模型
  18. [HITS算法]Authoritative Sources in a Hyperlinked Environment
  19. python客户端_python客户端编程
  20. 【ROS实践入门(九)ROS编译ORB-SLAM2运行】

热门文章

  1. jwt如何加盐_手把手教你使用JWT实现单点登录
  2. 量子计算机美国华裔科学家,量子计算机很神?18岁华裔少年用经典计算机算得一样快...
  3. 在线工具:找到神器,助你轻松应对各种职场难题
  4. 查看AWS中Identity and Access Management(IAM)的Access Key和Secret Access
  5. 算法:回溯十三 Subsets II不重复的数组子集(3种解法)
  6. 创建CocoaPods的Framework Swift组件化之路(上)
  7. android 监听网络的详细例子,android 短信 发送 监听 拦截等自己写的demo
  8. php laravel 面试,当面试关问你Laravel Facade,说出这几个关键词就可以
  9. python appium 并行多设备_appium 多个设备同时执行
  10. 麻省理工线性代数第一讲