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文件內容不再是難題

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章