1. 程式人生 > 其它 >使用easyExcel上傳至Linux伺服器出現空指標

使用easyExcel上傳至Linux伺服器出現空指標

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!!!!寫入怎麼會出錯呢,本地跑是沒問題的。經過一番百度後,確定了問題的所在:

  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映象即可解決問題。