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鏡像即可解決問題。