使用easyExcel上傳至Linux伺服器出現空指標
阿新 • • 發佈:2021-11-22
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的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映象即可解決問題。