1. 程式人生 > >spring boot 載入資源路徑配置和classpath問題

spring boot 載入資源路徑配置和classpath問題

1、spring boot預設載入檔案的路徑:

  • /META-INF/resources/
  • /resources/
  • /static/
  • /public/

我們也可以從spring boot原始碼也可以看到:

private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {  
        "classpath:/META-INF/resources/", 
        "classpath:/resources/",  
        "classpath:/static/", 
        "classpath:/public/"
};

2、Classpath含義

  1. 存放各種資源配置檔案 eg.init.properties log4j.properties struts.xml
  2. 存放模板檔案 eg.actionerror.ftl
  3. 存放class檔案對應的是專案開發時的src目錄編譯檔案

總結:這是一個定位資源的入口
一般java專案中 classpath存在與 WEB-INFO/目錄。
當我們需要某個class時,系統會自動在CLASSPATH裡面搜尋,如果是jar,就自動從jar裡面查詢,如果是普通的目錄,則在目錄下面按照package進行查詢。
但與PATH不同的是,預設的CLASSPATH是不包含當前目錄的,這也是CLASSPATH裡面要包含一個點的道理了。

Tomcat下的Web應用有兩個預置的classpath : WEB-INF/classes 和WEB-INF/lib啟動專案,專案就會載入這兩個目錄裡的資料。這是war包的規範.要改變預置的classpath比較麻煩,在Tomcat的配置檔案裡沒有發現類似的配置,要實現自己的classloader才能達到目的。

一個在tomcat中執行的web應用.它的classpath都包括如下目錄:
我知道的有:
%tomcat%/lib
web-inf/lib
web-inf/classes
環境變數裡的classpath

總結:classpath這是一個定位資源的入口.classpath下 lib的優先順序大於classes

;