上次寫了一行代碼解決導(dǎo)出導(dǎo)入,沒看的小伙伴建議先看下《【springboot+easypoi】一行代碼搞定excel導(dǎo)入導(dǎo)出》,但是實際業(yè)務(wù)中遇到一個問題,如果數(shù)據(jù)里比較大的時候,例如10w+數(shù)據(jù)一次導(dǎo)出,就會出現(xiàn)卡死情況,繼續(xù)看官方文檔,有大數(shù)據(jù)量導(dǎo)出方法,實現(xiàn)如下
@RequestMapping("export")
public void export(HttpServletResponse response) {
Map<String, Object> params = new HashMap<>();
Workbook workbook = bigExcel(1, params, null, new ExportParams("海賊王", "海賊王"), new Page<>());
ExcelExportUtil.closeExportBigExcel();
downLoadExcel("海賊王.xls", response, workbook);
}
private Workbook bigExcel(int pageNum, Map<String, Object> params, Workbook workbook, ExportParams exportParams, Page<SysUser> page) {
//分頁查詢數(shù)據(jù)
page.setCurrent(pageNum);
page.setSize(1000);
page.setCondition(params);
page = this.getData(sysUserService.queryPage(page));
List<SysUser> users = FastJsonUtils.toList(FastJsonUtils.toJSONString(page.getRecords()), SysUser.class);
workbook = ExcelExportUtil.exportBigExcel(exportParams, SysUser.class, users);
//如果不是最后一頁,遞歸查詢
if (page.getPages() > pageNum) {
bigExcel(pageNum + 1, params, workbook, exportParams, page);
}
return workbook;
}
private void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {
try {
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
response.setHeader("content-Type", "application/vnd.ms-excel");
workbook.write(response.getOutputStream());
} catch (IOException e) {
throw new NormalException(e.getMessage());
}
}
備注:導(dǎo)出11w+數(shù)據(jù)大概半分鐘左右,sql以及導(dǎo)出數(shù)據(jù)處理都可以再優(yōu)化,其他的就看各位小伙伴的需求了