【发布时间】:2022-06-19 12:21:37
【问题描述】:
SXSSFWorkbook workbook.createSheet() 方法在 linux 环境(OEL 8.5)上失败,没有抛出任何有意义的错误(它只是挂起)。
奇怪的是,XSSFWorkbook createSheet 类上的相同方法可以正常工作。下面是代码的sn-ps。有没有人遇到过类似的问题?
final SXSSFWorkbook workbook = new SXSSFWorkbook(new XSSFWorkbook(), 100, true, true);
workbook.setCompressTempFiles(true);
Sheet sheet = workbook.createSheet("Sheet 1"); //this method fails
final XSSFWorkbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet 1"); // this works fine
我们使用的是 apache POI 4.1.2 版本。相同的代码在 Windows 环境中运行良好。验证下面的字体,它们已经安装。如果您知道 Linux 环境中缺少什么,请告诉我。任何指针(或)Linux中的任何日志,我们可以在其中获得更多详细信息,请分享。
sudo apt-get 更新 sudo apt-get install fontconfig
【问题讨论】:
-
绝对不能简单挂起。如果出现问题,它应该抛出异常。也许它有资源问题,因此非常耗时。你试过
compressTmpFiles和useSharedStringsTable都false吗?您首先可以查看的日志是:/var/log/syslog和/var/log/messages。 -
@Axel Richter,我们正在尝试导出非常小的数据集。我还没有尝试将 compressTmpFiles 和 useSharedStringsTable 设置为 false。当我们在 OEL 8.2 中进行测试时,它在我们的环境中运行良好。相同的代码对很多客户来说都可以正常工作。但是对于一些使用 OEL 8.5 的客户,我们遇到了这个问题。我正在使用自定义 TempFileCreationStrategy 来确保 weblogic 服务器将文件写入它具有完全访问权限的目录。它在 POI 文件 DIR 中创建一个 *.gz 文件。 Weblogic 输出日志不显示任何错误。
-
工作表 = workbook.createSheet("Sheet 1");没有被执行,如果我们在这一行旁边添加跟踪,它们不会打印在日志中。在这一行之后,只有 finally() 代码被执行。即使我们添加 ex.printstacktrace(),日志中也不会打印任何内容。验证了 weblogic out.log,我们在日志中没有看到任何异常。
-
挂起时做一个线程转储,看看代码阻塞在哪里?我的预感是它在 JVM 中......
标签: apache-poi xlsx