问题:
POI 生成文件时会根据“java.io.tmpdir”配置自动生成 {java.io.tmpdir}/poifiles/,由于Linux上是生成到 /tmp/poifiles,此目录会被定时清理掉,导致文件无法生成
处理方案:
一、添加启动配置“java.io.tmpdir”
注意事项:
此配置并非只有POI使用,其他第三方Jar也使用此配置
{java.io.tmpdir}/poifiles/ 目录会在 JVM 停止后自动被清理。
不想被清理可配置“poi.keep.tmp.files”数据,只要不为空就不会自动清理(Linux清理/temp还是会被清)
代码逻辑见:org.apache.poi.util.TempFile.DefaultTempFileCreationStrategy#createTempFile
二、通过编码方式设置临时目录(在启动项目时设置一次即可)
File dir = new File("/xxx/poifile");
dir.mkdir();
TempFile.setTempFileCreationStrategy(new TempFile.DefaultTempFileCreationStrategy(dir));
两种方式同时存在时,以方式二执行