从Excel导入100万数据到MySQL,首先是分批读取Excel中的100w数据,这一点EasyExcel有自己的解决方案,这里我用的是每批20w,其次就是往DB里插入,怎么去插入,当然不能一条一条的循环,应该批量插入这20w条数据,同样也不能使用MyBatis的批量插入,因为效率也低。
我们应该使用分批读取 + JDBC批处理 + 手动事务控制
去插入,这样效率比较快。
前言
这里我使用的是单线程,多线程当然也可以实现,但是多线程容易造成OOM,需要合理的设置线程大小和JVM参数,这里就使用单线程测试下批量操作即可。多线程的话可以自己单独去实现一下,但要注意使用的正确性。
实战
创建SpringBoot项目
略
POM文件
1 |
|
YAML配置文件
注意jdbc批处理需要在url加上
rewriteBatchedStatements=true
1 | server: |
Excel文件对应的实体
1 | package com.itjing.excel.vo; |
用户导入监听器
1 | package com.itjing.excel.listener; |
用户业务层
1 | package com.itjing.excel.service; |
1 | package com.itjing.excel.service.impl; |
用户控制器
1 | package com.itjing.excel.controller; |
本人电脑测试导入100w条数据大概1分钟,这和电脑配置也有一定的关系。