1.首先是报错截图
2。代码内容
public String writeExcel(String updateTime) { // 获取文件生成路径 String fileName = PATH + "/staff-vacation" + updateTime + ".xlsx"; List<DataDTO> dataDTOS = null; try { dataDTOS = users.selectAll(updateTime); for (DataDTO dataDTO : dataDTOS) { if(null== dataDTO.getOpenid()||""== dataDTO.getOpenid()){ dataDTO.setOpenid("*"); } if(null== dataDTO.getDeleted()||""== dataDTO.getDeleted()){ dataDTO.setDeleted("0"); } if(null== dataDTO.getUpdateUser()||""== dataDTO.getUpdateUser()){ dataDTO.setUpdateUser("*"); } } } catch (Exception e) { log.error("文件转换异常", e); } log.info("文件存储路径:============="+fileName); // 把数据库的数据放到EXCEl表格中 EasyExcel.write(fileName, DataDTO.class).sheet("staff_vacation").doWrite(dataDTOS); return fileName;
3.排错思路
一开始出现空指针是因为数据库里面有脏数据,解决后上传到服务器发现问题还会存在,通过查看日志发现是从数据库查出文件后出现的空指针,没有对数据进行写入Excel操作。
首先确定路径没问题后,在代码中对写入文件单独抛异常后发现正常运行,发现就是写入文件的问题,What!!!!写入怎么会出错呢,本地跑是没问题的。经过一番百度后,确定了问题的所在:
Easyexcel的使用,选对版本很重要,不然会报错。官方推荐的版本清单如下:
poi版本:3.17及以上
easyexcel版本:建议使用2.0.x及以上
本文的讨论及代码,基于以下版本:
poi版本:3.17
easyexcel版本:建议使用2.0.6及以上
1. EasyExcel mac或者windows下导出EXCEL正常,Linux服务器下NullPointerException
经过了解,知道是因为alpine中缺少FontConfiguration,那么就考虑安装ttf-dejavu这个软件。
在这篇博客找到了解决办法。
在服务器适当位置位置创建一个Dockerfile,内容为:
FROM java:8-jre-alpine # Install cURL RUN echo -e "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main\n\ https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/community" > /etc/apk/repositories RUN apk --update add curl bash ttf-dejavu && \ rm -rf /var/cache/apk/*
在同一位置执行:
docker build -t docker.io/java-font:8-jre-alpine .
执行完毕后会有一个新的java的镜像:
REPOSITORY IMAGE ID CREATED SIZE docker.io/java-font 8-jre-alpine dc7703ec6f07 31 hours ago 131.5 MB
再次构建项目的时候使用新的jdk镜像即可解决问题。