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


問題描述:

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

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM