代码从uat环境测试通过后通过docker部署到生产环境时出错了,从错误提示来看是提示在使用easyexcel进行导出时报错了,提示如下,出现这个问题,代码层面并没有出现报错,一开始以为是uat环境jdk和生产版本的不同导致的,后面查看了一下,原来是docker的问题。本小结来梳理一下
报错提示:
java.lang.NoClassDefFoundError: sun.awt.X11FontManager
这种一般是出现在 docker部署,且使用了精简版的基础镜像,有多精简呢?精简到把字体都阉割掉了, 如果你的项目有字体相关操作,比如导出 excel,验证码,就会报上述异常。
对于一个Java服务器来说经常要处理一些图形元素,例如地图的创建或者图形和图表等。这些API基本上总是需要运行一个X-server以便能使用AWT(Abstract Window Toolkit,抽象窗口工具集)
处理方式: 在dockerfile中加上这个字体配置,把字体给安装上即可
容器环境下
FROM java:8
在构建镜像时安装字体,dockerfile增加命令:
RUN yum install dejavu-sans-fonts fontconfig -y
如果 container已经启动,又不想换,那就直接进到container,安装字体:
yum install dejavu-sans-fonts fontconfig -y