【问题标题】:sxssf-workbook-createsheet-fails-on-linux-environment (OEL 8.5), Solaris 11.4sxssf-workbook-createsheet-fails-on-linux-environment (OEL 8.5), Solaris 11.4
【发布时间】: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

【问题讨论】:

  • 绝对不能简单挂起。如果出现问题,它应该抛出异常。也许它有资源问题,因此非常耗时。你试过compressTmpFilesuseSharedStringsTablefalse吗?您首先可以查看的日志是:/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


【解决方案1】:

将 -Djava.io.tmpdir=/u01/tmp -Djava.awt.headless=true 设置为 weblogic 启动参数可修复此问题。

请确保授予 /u01/tmp 目录的完全权限。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

我也面临同样的问题。如果知道此问题的任何解决方案,请告诉我?

【讨论】:

猜你喜欢
  • 2018-08-05
  • 1970-01-01
  • 2023-02-16
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
  • 2022-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多