【问题】导出excel发生异常,公司好多应用放在同一台服务器上,有应用 A B C D E F G H I J K L M N O P Q R S T
临时目录 /tmp/poifiles 这个文件夹被应用A创建, 所属用户为 A,用户组只有r-x权限,没有写权限
,export error request:ExportOrderRequest,error:{}
java.lang.RuntimeException: java.io.IOException: Permission denied
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet(SXSSFWorkbook.java:662)
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:679)
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:90)
at com.abc.fb.cms.utils.excelUtil.Excel.createSheet(Excel.java:85)
at com.abc.fb.cms.utils.ExcelSingleExport.<init>(ExcelSingleExport.java:34)
at com.abc.fb.cms.wrap.ExportHelper.newExcelSingleExport(ExportHelper.java:144)
at com.abc.fb.cms.wrap.ExportHelper.export(OrderExportHelper.java:85)
at com.abc.fb.cms.controller.OrderController.lambda$export$0(OrderController.java:326)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: Permission denied
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createTempFile(File.java:2024)
at org.apache.poi.util.DefaultTempFileCreationStrategy.createTempFile(DefaultTempFileCreationStrategy.java:110)
at org.apache.poi.util.TempFile.createTempFile(TempFile.java:66)
at org.apache.poi.xssf.streaming.SheetDataWriter.createTempFile(SheetDataWriter.java:87)
at org.apache.poi.xssf.streaming.SheetDataWriter.<init>(SheetDataWriter.java:70)
at org.apache.poi.xssf.streaming.SheetDataWriter.<init>(SheetDataWriter.java:75)
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheetDataWriter(SXSSFWorkbook.java:330)
at org.apache.poi.xssf.streaming.SXSSFSheet.<init>(SXSSFSheet.java:80)
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet(SXSSFWorkbook.java:658)
... 11 common frames omitted
【解决方式】 /tmp/poifiles 文件夹权限设置为 777 或者 把其他应用的临时目录改掉,不和其他应用的临时目录相同 -Djava.io.tmpdir=/abc-web/tmp