springboo在開發和發布項目時的路徑問題總結如下:
1、springboot獲取當前項目路徑的地址
System.getProperty("user.dir")
輸出目錄: G:\outshine\wangsoso
2、獲取classes目錄絕對路徑
String path = ClassUtils.getDefaultClassLoader().getResource("").getPath();
String path = ResourceUtils.getURL("classpath:").getPath();
輸出目錄: /G:/outshine/wangsoso/target/classes/
//如果上傳目錄為/static/images/upload/,則可以如下獲取:
File upload = new File(path.getAbsolutePath(),"static/images/upload/");
if(!upload.exists()) upload.mkdirs();
System.out.println("upload url:"+upload.getAbsolutePath());
//在開發測試模式時,得到的地址為:{項目跟目錄}/target/static/images/upload/
//在打包成jar正式發布時,得到的地址為:{發布jar包目錄}/static/images/upload/
注意:以jar包發布項目時,我們存儲的路徑是與jar包同級的static目錄,因此我們需要在jar包目錄的application.properties配置文件中設置靜態資源路徑,如下所示:
#設置靜態資源路徑,多個以逗號分隔
spring.resources.static-locations=classpath:static/,file:static/
3、配置文件讀取順序
以jar包發布springboot項目時,默認會先使用jar包跟目錄下的application.properties來作為項目配置文件。
如果在不同的目錄中存在多個配置文件,它的讀取順序是:
1、config/application.properties(項目根目錄中config目錄下)
2、config/application.yml
3、application.properties(項目根目錄下)
4、application.yml
5、resources/config/application.properties(項目resources目錄中config目錄下)
6、resources/config/application.yml
7、resources/application.properties(項目的resources目錄下)
8、resources/application.yml
注:
1、如果同一個目錄下,有application.yml也有application.properties,默認先讀取application.properties。
2、如果同一個配置屬性,在多個配置文件都配置了,默認使用第1個讀取到的,后面讀取的不覆蓋前面讀取到的。
3、創建SpringBoot項目時,一般的配置文件放置在“項目的resources目錄下”