問題描述:
Springboot沒有打成jar以前,能夠成功獲取讀取resources目錄下xxx.json文件的 路徑。可是打成jar包後,接口調不通,緣由是獲取不到文件的路徑。java
緣由:
在本地進行調試時,文件是真實存在於磁盤的某個目錄。此時經過獲取文件路徑,是能夠正常讀取的,由於文件確實存在。linux
而打包成jar之後,實際上文件是存在於jar這個文件裏面的資源文件,在磁盤是沒有真實路徑的。spring
因此經過ResourceUtils.getFile或者this.getClass().getResource("")方法沒法正確獲取文件。json
解決辦法:
1.在網上查了相關資料說經過流的方式獲取,可是測試後仍是沒有獲取到。app
2.最終採用的是絕對路徑的方式,獲取linux環境下的存放文件的具體路徑。如:(/usr/local/)工具
具體代碼:
application.yml設置:
path: resourcePath: /usr/local/data
代碼:
說明:我使用的是自定義工具類,裏面的方法是靜態的,因此不能直接經過一下這種方式。
緣由:spring不容許/不支持把值注入到靜態變量中。Spring的@Value依賴注入是依賴set方法,set方法是普通的對象方法,static變量是類的屬性,static沒有set方法。
@Value("${path.resourcePath}") private static String resourcePath;
作法:
說明:Spring支持set方法注入,能夠利用非靜態的setter方法注入靜態常量。注意set方法不能有static
private static String resourcePath; @Value(value = "${URI.resourcePath}") private void setResourcePath(String resourcePath){ this.resourcePath = resourcePath ; }
注意:class須要加 @Component等註解,這樣spring才能掃描到
這是這幾天作項目時,遇到的問題,特此記錄。測試