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路徑下);
如:
- <param-value>classpath:applicationContext-*.xml</param-value>
或者引用其子目錄下的文件,如
- <param-value>classpath:context/conf/controller.xml</param-value>
classpath* 的使用:當項目中有多個classpath路徑,並同時加載多個classpath路徑下(此種情況多數不會遇到)的文件,*就發揮了作用,如果不加*,則表示僅僅加載第一個classpath路徑,代碼片段:
- <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 文件路徑: