项目场景:
springboot + nacos + mybatis:
为了让用户根据自己的需求去抽取数据库中需要的数据,由产品经理定义 sql 模板,通过程序实现数据导出下载
问题描述
大文件导出 导致内存飙升
解决方案:
EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。
他能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。
主要代码如下:
public static void main(String[] args) {
String path = "F:\\importFile\\";
String filePath = "importDataFile.xlsx";
//创建sheet
WriteSheet writeSheet = EasyExcel.writerSheet(filePath).build();
//列明(动态头部)
List<List<String>> heads = new ArrayList<>();
List<String> h1 = new ArrayList<>();
h1.add("a1");
heads.add(h1);
File file = new File(path);
if (!file.exists()) {
file.mkdirs();
}
//内容(导入到excel,一个sheet不能超过104万)
List<List<String>> res = new ArrayList<>();
List<String> res1 = new ArrayList<>();
res1.add("a");
List<String> res2 = new ArrayList<>();
res2.add("a2");
res.add(res1);
res.add(res2);
ExcelWriter excelWriter = EasyExcel.write(path + filePath).head(heads).build();
if (!new File(path + filePath).exists()) {
//如果文件为空,先生成一个文件
EasyExcel.write(path).sheet(filePath).doWrite(null);
EasyExcel.write(path).head(heads).build();
}
if (!StringUtil.isEmpty(res) && null != excelWriter) {
//写入内容(这一步可以放入循环中执行,可以减少 数据存储造成的内存问题)
excelWriter.write(res, writeSheet);
}
//一定记得有这一步
excelWriter.finish();
}
也可以参考官方网站的例子:官网连接