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



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM