分批查询,分批导出--超大数据导出处理--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();
    }


}
经验分享 程序员 微信小程序 职场和发展