1. 程式人生 > >引數配置檔案properties--使用spring載入和簡化讀取

引數配置檔案properties--使用spring載入和簡化讀取

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

Spring 支援在程式碼中使用@Value註解的方式獲取properties檔案中的配置值,從而大大簡化了讀取配置檔案的程式碼。

使用方法如下:

假如有一個引數配置檔案test.properties

  1. #資料庫配置
  2. database.type=sqlserver
  3. jdbc.url=jdbc:sqlserver://192.168.1.105;databaseName=test
  4. jdbc.username=test
  5. jdbc.password=test

1、先在配置檔案中宣告一個bean

  1. <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
    >
  2. <property name="locations">
  3. <array>
  4. <value>classpath:test.properties</value>
  5. </array>
  6. </property>
  7. </bean>
2、在程式碼中使用@Value()註解
  1. @Value("${jdbc.url}")
  2. private String url = "";
這樣就可以獲取到配置檔案中的資料庫url引數值並賦給變數url了,成員變數url不需要寫get、set方法。

當然如果你想在配置檔案的引數值上進行修改後再附上去,可以寫個set方法,把@Value註解改到set方法上,例如:

  1. @Value("${jdbc.url}")
  2. public void setUrl(String url) {
  3. this.url= "http://" + url;
  4. }

3、不僅如此,還可以直接在spring的配置檔案中使用${XXX}的方式注入,例如:

  1. <!-- 資料來源 -->
  2. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
  3. <!-- 基本屬性 url、user、password -->
  4. <property name="url" value="${jdbc.url}" />
  5. <property name="username" value="${jdbc.username}" />
  6. <property name="password" value="${jdbc.password}" />
  7. </bean>
補充:

之前寫的bean直接指向了spring預設的PropertyPlaceholderConfigurer類,其實也可以重寫它的一些方法,來滿足自己的需求。步驟就是自己定義一個子類繼承PropertyPlaceholderConfigurer,然後重寫裡面的方法(mergeProperties()、loadProperties(Properties props)等),例如:

  1. package com.test;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.IOException;
  5. import java.util.Properties;
  6. import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
  7. /**
  8. * Spring引數配置載入
  9. */
  10. public class MyPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
  11. //獲取配置檔案的引數和引數值
  12. protected Properties mergeProperties() throws IOException {
  13. //呼叫父類的該方法獲取到引數和引數值
  14. Properties result = super.mergeProperties();
  15. String url = result.getProperty("jdbc.url");
  16. //對jdbc.url引數的值前面加上"http://"後再放進去,就實現了引數值的修改
  17. result.setProperty("jdbc.url", "http://"+url);
  18. }
  19. //載入配置檔案
  20. protected void loadProperties(Properties props) throws IOException {
  21. if(XXX){//如果滿足某個條件就去載入另外一個配置檔案
  22. File outConfigFile = new File("配置檔案的全路徑");
  23. if(outConfigFile.exists()){
  24. props.load(new FileInputStream(outConfigFile));
  25. }else{
  26. super.loadProperties(props);
  27. }
  28. }else{
  29. //否則就繼續載入bean中定義的配置檔案
  30. super.loadProperties(props);
  31. }
  32. }
  33. }
然後之前宣告的bean的class指向它就行了,如下:
  1. <bean class="com.test.MyPropertyPlaceholderConfigurer">
  2. <propertyname="locations">
  3. <array>
  4. <value>classpath:test.properties</value>
  5. </array>
  6. </property>
  7. </bean>
這裡寫圖片描述