问题描述
公司“产品经理”临时提出来的需求,管理后台的某些的地方需要增加报表这样的东西,也就是传说中的导出excel。
本地测试都是正常的,但是部署到开发环境后是这个样子的:

多次debug调试,本地启动项目都是好的,部署到线上的环境就出问题了。突然就想起来,是不是nginx代理有问题?又一次扑入了开发环境去调试,结果GG了,根本不是这个问题。
异常问题
调试的过程中发现为什么开发环境一点日志都没有?这不符合道理啊?直接问运维,日志打印是什么级别,答案是INFO,那么好,改成DEBUG模式,继续调试。
可是竟然还没有日志!!!我突然间回想到上周末运维跟CTO讨论的问题,貌似开发环境不再是正常的部署,而是迁移到了docker中?我跟运维确定以后,果然,运行环境迁移到了docker,好吧,竟然都没通知。
最后去查看docker中的日志,发现如下问题:

是的,我很好奇,Returning JDBC Connection to DataSource
抛出来个空指针,FontConfiguration.java:1264
这是字体配置???,可JDBC的连接池需要什么字体配置么???
问题解决
本来我觉得不大可能是这种问题,但是好奇心的趋势下去找了一下。发现有一个人也有这个问题,但是他是解决Alpine缺少字体的问题,很少,我也是字体问题,是不是一样的?
造成这个问题的原因是因为docker的镜像是Alpine,他是最小化的一个docker镜像,也是最节省资源的,所以我们使用的是它,那么问题来了,Alpine是没有自带默认字体造成的。
Excel组件试图根据字体大小自动调整单元格宽度,当寻找fontconfig时发现根本找不到,返回一个Null。
项目下的Dockerfile这个文件中,新增如下的配置:
RUN apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/*
添加了一款名字叫dejavu
的字体,重新部署,很好,完美的解决了问题。但是建议更换镜像,虽然说打包安装速度二十几秒就完成了,但是相对还是会拉低服务部署的速度。