1. 程式人生 > >classpath 及讀取 properties 檔案

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程式碼   收藏程式碼
  1. <param-value>classpath:applicationContext-*.xml</param-value>  

或者引用其子目錄下的檔案,如  

Xml程式碼   收藏程式碼
  1. <param-value>classpath:context/conf/controller.xml</param-value>  

 classpath* 的使用:當專案中有多個classpath路徑,並同時載入多個classpath路徑下(此種情況多數不會遇到)的檔案,*就發揮了作用,如果不加*,則表示僅僅載入第一個classpath路徑,程式碼片段: 

Xml程式碼   收藏程式碼
  1. <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檔案內容不再是難題

關注公眾號,分享乾貨,討論技術