一. 概述
在处理导出大数据时, 如果全部查出来再导出, 这样容易导致内存溢出, 为防止内存溢出, 可以分批查询进行导出
二. 示例
场景: 现在到导出30000条数据, 计划每次查询10000进行处理, 导出3个sheet, 每个sheet10000条数据
public class Test{
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class TestVO {
@ExcelProperty(value = "*姓名", index = 0)
private String name;
@ExcelProperty(value = "*年龄", index = 1)
private int age;
@ExcelProperty(value = "学校", index = 2)
private String school;
}
/**
* 测试分批查询导出
*/
@Test
public void testBatchExport() throws Exception {
FileOutputStream outputStream = new FileOutputStream("D:/1.xlsx");
ExcelWriter excelWriter = EasyExcel.write(outputStream).build();
/**
* 分批查询进行导出
* 示例: 现在要导出30000条数据, 模拟每次查询出10000条数据进行导出(防止全部查出内存溢出), 循环3次
*/
WriteSheet writeSheet = EasyExcel.writerSheet(0).head(TestVO.class).build();
for(int i = 0 ; i < 3 ; i++){
// 每次查询10000条数据
List<TestVO> testVOS = new ArrayList<>();
for(int j = 0; j < 10000;j++){
TestVO testVO = new TestVO("名字"+j,j,"学校"+j);
testVOS.add(testVO);
}
excelWriter.write(testVOS,writeSheet);
}
excelWriter.finish();
}