分批查询,分批导出--超大数据导出处理--easyExcel
·
情景:我们在做项目中,有个20万左右的数据要导出来,我们查出数据库要导出的话,系统就卡死了,
我们分批查询,分批导出
public void exportDmfAll(HttpServletResponse response,ProcessCompletionVo vo) {
ExcelWriter excelWriter = null;
try {
String fileName = "数据导出";
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment;filename=" +
new String(fileName.getBytes("UTF-8"), "ISO8859-1") + ".xlsx");
excelWriter = EasyExcel.write(response.getOutputStream()).build();
Integer page = 1;
while (true) {
vo.setPageNum(page);
vo.setPageCount(5000);
R r = this.getBusinessArea(vo);
List<DmFbillprocessNodeDetailModel> list = ((Page<DmFbillprocessNodeDetailModel>) r.get("data")).getContent();
if (list.size()==0) {
return;
}
R typeFlagR = getTypeFlagByBill(vo.getProcessName());
String typeFlag = "";
if (!ObjectUtils.isEmpty(typeFlagR.get("business_type"))) {
typeFlag = String.valueOf(typeFlagR.get("business_type"));
}
//if ("国内".equals(typeFlag)) {
List<DmfAllExcelOne> listResult = new ArrayList<>();
for (DmFbillprocessNodeDetailModel dmFprocessNodeReportModel : list) {
DmfAllExcelOne excel = new DmfAllExcelOne();
BeanUtils.copyProperties(dmFprocessNodeReportModel, excel);
listResult.add(excel);
}
WriteSheet writeSheet = EasyExcel.writerSheet(page - 1, "数据导出" + (page)).head(DmfAllExcelOne.class)
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
excelWriter.write(listResult, writeSheet);
//}
page = page + 1;
}
} catch (IOException e) {
e.printStackTrace();
log.error("导出失败[{}]", e.getMessage());
} finally {
excelWriter.finish();
}
}
大家有不明白的可以留言,或者有更好的方法,可以直接联系我,本人十分感谢~
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)