問題描述:
Springboot沒有打成jar之前,可以成功獲取讀取resources目錄下xxx.json文件的 路徑。但是打成jar包后,接口調不通,原因是獲取不到文件的路徑。
原因:
在本地進行調試時,文件是真實存在於磁盤的某個目錄。此時通過獲取文件路徑,是可以正常讀取的,因為文件確實存在。
而打包成jar以后,實際上文件是存在於jar這個文件里面的資源文件,在磁盤是沒有真實路徑的。
所以通過ResourceUtils.getFile或者this.getClass().getResource("")方法無法正確獲取文件。
解決辦法:
1.在網上查了相關資料說通過流的方式獲取,但是測試后還是沒有獲取到。
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才能掃描到
這是這幾天做項目時,遇到的問題,特此記錄。
