说明:
Linux CentOS7 使用 Docker部署的;只有生产环境会出现这个问题。
问题现象:
上图片
问题分析:
① 首先判断报错肯定是说sheet页名称重复的问题
但是通过观察代码可以肯定绝对不是sheet页重复的问题(就不上代码了哈),那既然不是sheet页重复,又报sheet页重复。那就…上了懵13树了。
② 经过层层筛选,对每一道工序的严格把关,原材料的慎重选择。最终将问题定位在了Docker没有字体依赖上。
定位过程简述:
生产环境和开发环境的差异,前者是linux使用了docker,后者是windows;在linux上安装jdk,并排查是否支持中文字体后,是则直接启动项目,不是则安装中文字体后启动项目。使用导出,看问题。此时导出正常了。意味着确实是docker没有字体依赖的问题。我们需要解决的就是Docker安装字体依赖的问题了!!!
解决方案:
在此分为离线,在线两种方式;看官自提
1、在线方式
安装jdk基础镜像
docker pull openjdk:8-alpine
编辑dockerfile文件
#指定基础镜像
FROM openjdk:8-alpine
#解决字体问题
RUN apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/*
执行
docker build -t XXX .
XXX为镜像名称
之后将XXX镜像作为java的基础镜像运行项目后,导出正常了!
2、离线方式
找一个可以链接网络的Linux服务器并安装Docker并按照在线方式生成一个XXX镜像
将此镜像打为tar包
docker save -o XXX.tar 镜像名称:镜像版本
将生成的tar包搞到离线得生产环境上并重新加载
docker load -i XXX.tar
这样我们就得到了一个带字体依赖得jdk基础环境,将此镜像作为java运行项目的基础镜像。运行即可~