我想用500000条记录创建excel(xlsx)报告,而不是10个cols.With jboss 512M和apache poi(3.9)。
由于poi usermodel存在内存问题,因此预期JVM因内存不足错误而崩溃。所以我尝试使用SXSSFWorkbook提供临时目录以将行刷新到磁盘。生成的报告没有任何问题。
我正在生成Web应用程序的报告,其中我正在将workbbok写入servlet OP流。如果多个用户尝试同时获取报告,这会导致任何问题,因为临时目录由多个线程共享。
我还调用了SXSSFWorkbook的dispose方法来清理临时文件,它是否安全,因为我怀疑它不应该删除其他线程创建的临时文件(其他用户请求)
同样以下代码是安全的吗?因为我在关闭输出流之前处理但是在将工作簿写入输出流之后。
workbook.write(out);
workbook.dispose();
out.flush();
out.close();
答案 0 :(得分:0)
try { /*...*/ } finally { file.delete() }
块。
答案 1 :(得分:0)
它应该是安全的,因为POI在内部使用File.createTempFile()
- 代码位于org.apache.poi.util.TempFile.createTempFile(String, String)
。但是,如果您运行多个Web应用程序(具有单独的JVM),除非您设置了属性poi.keep.tmp.files
,否则可能会遇到麻烦 - POI在临时目录中的poifiles
子目录中创建其临时文件,并尝试在退出时删除它。如果其他带有POI的JVM仍在运行,这将导致问题。