1. 程式人生 > 其它 >本地測試沒問題, 打jar包後在Linux為找不到資源

本地測試沒問題, 打jar包後在Linux為找不到資源

問題

springboot專案, 本地開發測試時是可以獲取到模板檔案, 但打成jar包部署後報錯檔案不存在

為什麼

因為jar包是一個單獨的檔案而非資料夾,絕對不可能通過"file:/e:/.../ResourceJar.jar/resource /res.txt"這種形式的檔案URL來定位res.txt。即使是相對路徑,也無法定位到jar檔案內的txt檔案。
因為".../ResourceJar.jar!/resource/...."並不是檔案資源定位符的格式 (jar中資源有其專門的URL形式: jar:!/{entry} )
參考原因:
深入jar包:從jar包中讀取資原始檔

解決方法

import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
Resource[] resource = new PathMatchingResourcePatternResolver().getResources("classpath:" + "/excelTemplates/" + fileName);
InputStream inputStream = resource[0].getInputStream();
缺點: 模板如果要修改需要重新打包部署
優點: 遷移時直接移動jar包即可

在Linux中建立目錄存放資原始檔, 修改路徑即可,
優點: 可以隨時更新模板, 不需要重新打包部署
缺點: 遷移時需要注意不要遺漏檔案, 且需要建立資料夾儲存檔案

每個牛B人物背後都有段苦逼的歲月,只要像SB一樣堅持,終將牛B!