问题拆解:1.如何读取百万条Excel数据?poi用户模式会出现内存溢出啊
2.读取到的Excel数据存储在哪里?100万条数据放在内存不是一件很恐怖的事情吗?
3.如何高效的将数据写入到数据库?多线程如何使用?
方案1:poi的命令触发模式解决读取的时候内存溢出问题、读取到的数据放到内存中、内存中通过forkjoin工具任务拆解,加入到队列
深入思考:1》每次都要等待读取完数据,才能进行其他操作,读取本身就花费了9秒时间 2》100万条数据很消耗内存啊
方案2:分2个线程:线程A和线程B,线程A负责读取Excel数据,线程B负责写入到数据库,线程A和线程B如何配合工作呢?多线程的生产消费者模式
最终核心代码附上:
poi工具类代码:
读请求使用的是poi的命令模式,读取只负责向list中添加数据,无上限
生产消费模式的核心代码
使用线程的工厂模式,将写请求加入到队列
队列中,不断拿取写请求,执行
写请求最终的执行方法
温馨提示:数据库的操作可以使用批处理
原文地址:http://blog.51cto.com/13496382/2092048