classpath 及讀取 properties 檔案
java程式碼中獲取專案的靜態檔案,如獲取 properties 檔案內容是必不可少的。
Spring 下只需要通過 @Value 獲取配置檔案值
<!-- 資原始檔--> <util:properties id="application" location="classpath:config.properties" />
@Value("#{application['pom.credit.url']}") private void setCreditUrl(String url){ this.creditUrl = url; }
Spring boot 下我們只需要在 config 目錄下的 application.yml 中寫入配置值如:
local-info: school-id: test
通過 @ConfigurationProperties 註解載入 local-info 下的配置,通過 set 方法注入 school-id
@ConfigurationProperties(prefix="local-info") @Component public class LocalConfigEntity { private String schoolId;之後再需要用到 schoolId 則通過 get 方法獲取值
上面簡單的提及下通過框架我們可以很容易獲取到配置檔案賬值,但當我們離開這些框架,該如何讀取這些配置檔案,上圖解:
用 Properties 類讀取 properties 檔案
static { Properties prop = new Properties(); InputStream in = UserUtil.class.getResourceAsStream("/config.properties"); try { prop.load(in); param1 = prop.getProperty("param1").trim(); param2 = prop.getProperty("param2").trim(); } catch(IOException e) { e.printStackTrace(); } }
這裡補充 classpath 路徑說明
classpath 路徑在每個J2ee專案中都會用到,即WEB-INF下面的classes目錄,所有src目錄下面的java、xml、properties等檔案編譯後都會在此,所以在開發時常將相應的xml配置檔案放於src或其子目錄下;
引用classpath路徑下的檔案,只需在檔名前加classpath:(需保證該檔案確實位於classpath路徑下);
如:
Xml程式碼- <param-value>classpath:applicationContext-*.xml</param-value>
或者引用其子目錄下的檔案,如
Xml程式碼- <param-value>classpath:context/conf/controller.xml</param-value>
classpath* 的使用:當專案中有多個classpath路徑,並同時載入多個classpath路徑下(此種情況多數不會遇到)的檔案,*就發揮了作用,如果不加*,則表示僅僅載入第一個classpath路徑,程式碼片段:
Xml程式碼- <param-value>classpath*:context/conf/controller*.xml</param-value>
########################################################
首先 classpath是指 WEB-INF資料夾下的classes目錄
解釋classes含義:
1.存放各種資源配置檔案 eg.init.properties log4j.properties struts.xml
2.存放模板檔案 eg.actionerror.ftl
3.存放class檔案 對應的是專案開發時的src目錄編譯檔案
總結:這是一個定位資源的入口
如果你知道開發過程中有這麼一句話:慣例大於配置 那麼也許你會改變你的想法
對於第二個問題
這個涉及的是lib和classes下檔案訪問優先順序的問題: lib>classes
對於效能的影響應該不在這個範疇
########################################################
注意:用classpath*:需要遍歷所有的classpath,所以載入速度是很慢的,因此,在規劃的時候,應該儘可能規劃好資原始檔所在的路徑,儘量避免使用 classpath*
網上還提到了用反射獲取 properties 檔案路徑:
Java專案中讀取properties檔案,以及六種獲取路徑的方法
五種方式讓你在java中讀取properties檔案內容不再是難題