本文共 2056 字,大约阅读时间需要 6 分钟。
@Testpublic void testPrint()throws IOException{ String xlsFile="F://out.xlsx"; Workbook wb=new XSSFWorkbook();//XSSF操作Excel2007以上版本 Sheet sheet=wb.createSheet("海量数据测试簿"); Row nRow=null; Cell nCell=null; for (int i=0;i<10000;i++) { System.out.println(i); nRow=sheet.createRow(i); for (int j=0; j<20; j++) { nCell=nRow.createCell(2); nCell.setCellValue("我是单元格"); } } //创建单元格样式 CellStyle tStyle=wb.createCellStyle(); Font nFont=wb.createFont(); nCell.setCellStyle(this.textStyle(wb,tStyle,nFont)); OutputStream os=new FileOutputStream(new File(xlsFile)); wb.write(os); os.flush(); os.close(); }这里我们将要打印万条数据,同时我们还要检测我们的内存情况,这个时候我们要使用一个内存查看器,在企业中常用的一个小型的内存查看工具 Jdk自带的 jvisualvm.exe 我们打开jvisualvm.exe,发现其中可以检测本地多个程序的多个渠道的信息(如线程): 我们下面来运行我们的testPrint方法,来看看它对我们的本地内存的影响: 执行前监视情况 开始执行 执行后监视情况 执行后CPU情况 可以看到,我们刚刚才10万级别的数据,内存就已经将近过半了,所以百万级别的数据一定会内存泄露,所以我们要进行优化 对于百万级数据,我们可以进行以下优化: 1)TOMCAT 启动参数变大 2)Myeclipse启动参数调整 3)Jvm启动参数调整 使用POI ooxml SXSSF对象,注意引入jar包: poi-ooxml-3.9.jar poi-ooxml-schemas-3.9.jar 它解决思路: 在打印过程中,已经加工完的对象,临时存到一个临时文件中,它采用xml临时文件。最终处理完时,将这些临时内容写入到最终的xlsx文件中。 我们在这里测试一下(100万条数据):
@Testpublic void testPrint2()throws IOException{ String xlsFile="F://out.xlsx"; Workbook wb=new SXSSFWorkbook();//XSSF操作Excel2007以上版本 Sheet sheet=wb.createSheet("海量数据测试簿"); Row nRow=null; Cell nCell=null; for (int i=0;i<1000000;i++) { System.out.println(i); nRow=sheet.createRow(i); for (int j=0; j<20; j++) { nCell=nRow.createCell(2); nCell.setCellValue("我是单元格"); } } //创建单元格样式 CellStyle tStyle=wb.createCellStyle(); Font nFont=wb.createFont(); nCell.setCellStyle(this.textStyle(wb,tStyle,nFont)); OutputStream os=new FileOutputStream(new File(xlsFile)); wb.write(os); os.flush(); os.close(); }过程中我们观察我们的CPU和监控,发现值明显低于之前我们使用HSSF以及XSSF。 同时生产一些临时文件也证实了它的优化机制是采用临时文件 、 我们如何将大数据导入数据库? CSV文件,导入到数据库中。 CSV是一个标准的导入导出文件格式,实际是一个txt文件。 第一行是一个字段的标题,它们用逗号隔开。 在Sqlyog中导入CSV文件: 导入完成:
转载请注明出处: