背景
今天需要寫一個導出的Excel的功能,但是發現當資料量到3萬條時,列數在23列時,記憶體溢出,CPU使用100%,測試環境直接炸掉。在本地測試時發現,導出3000條左右的資料的時候,堆記憶體瞬間升高500M左右。然後發現了SXSSFWorkbook這個類。
簡介
使用方式
= null;
OutputStream outputStream = null;
try {
outputStream = response.getOutputStream();
//建立工作簿
workbook = new SXSSFWorkbook();
// 打開壓縮功能 防止占用過多磁盤
workbook.setCompressTempFiles(true);
// 建立一個工作表
Sheet sheet = workbook.createSheet("表名");
// 建立一行
Row titleRow = sheet.createRow(0);
// 建立一個單元格
Cell cell = titleRow.createCell(0);
// 給單元格指派
cell.setCellValue("内容");
// 将工作簿寫入輸出流
workbook.write(outputStream);
} catch (Exception e) {
e.printStackTrace();
}finally {
if (workbook != null) {
//使用完畢後将産生的臨時檔案删除 防止将磁盤搞滿
workbook.dispose();
}
if (outputStream != null) {
outputStream.close();
}
}
注意點
- 最好開啟壓縮模式 workbook.setCompressTempFiles(true),這樣可以使得臨時檔案體積大幅減少。
- 使用完畢後釋放 workbook.dispose(); 防止臨時檔案一直增加 撐爆硬碟。
- 可以參考easyexcel解決方案。