使用easyExcel上传至Linux服务器出现空指针

1.首先是报错截图
使用easyExcel上传至Linux服务器出现空指针

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!!!!写入怎么会出错呢,本地跑是没问题的。经过一番百度后,确定了问题的所在:

  1. easyExcel和POI的jar包不兼容

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镜像即可解决问题。

上一篇:easyExcel实现Excel导出功能


下一篇:直接使用JDK17导致EasyExcel无法使用的问题