SpringBoot打成jar包後,獲取不到讀取resources目錄下文件路徑的問題

問題描述:

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才能掃描到

這是這幾天作項目時,遇到的問題,特此記錄。測試

相關文章
相關標籤/搜索