侧边栏壁纸
  • 累计撰写 58 篇文章
  • 累计创建 67 个标签
  • 累计收到 1 条评论

EasyExcel 踩坑——NullPointrtException:null at sun.awt.FontConfiguration

lihaocheng
2022-08-20 / 0 评论 / 0 点赞 / 2,485 阅读 / 700 字
温馨提示:
晚上记得开启夜间模式哦

EasyExcel 导出 Excel 文档,在开发机可以正常导出。上了测服之后,导出报空指针。

截屏20220820 18.11.22.png

首先怀疑自己,但是又看见是 awt 报的空指针。懵逼了。
赶紧去 GitHub 看看有没有碰到相同问题的人。找到了一位和我一样情况的兄弟。

相同的代码,不同的结果。java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion() #157

原来是因为 JDK 里面缺少字体软件,所以报错。

开发机的 Docker 基础镜像是 FROM openjdk:8,而测试环境的是FROM openjdk:8-jdk-alpine ,而 alpine 是不带字体库。

瞬间明白了,为什么上了测服会报错。

解决方案

在参考了官方给出的解决方案之后,我又按自己的需求做了尝试。

1.换基础镜像

这个最简单,但是我们其他服务在生产/测服都是 openjdk:8-jdk-alpine 。单独换镜像会出问题。为了 awt 就让镜像大很多也不太划算。

2.使用内存导出

EasyExcel.write(fileName, DemoData.class)
        // 核心这个配置 开始内存处理模式
        .inMemory(Boolean.TRUE)
        .sheet("模板")
        .doWrite(data());

加上 inMemory(Boolean.TRUE) 就可以开启内存处理模式。避开 awt 。

不过官方提示了,1W 数据以内可以考虑,大了很容易OOM。遂只能放弃。

3.构建镜像的时候安装字体库

最后是采用安装字体库的方式解决的,只要在 Dockerfile 中加上

RUN  apk add ttf-dejavu

就可以在镜像中安装字体库了

0

评论区