Spring配置文件外部化配置及.properties的通用方法


摘要:本文 深入探討了配置化文件(即.properties)的普遍應用方式 。包括了Spring、一般的、遠程的三種使用方案。

關鍵詞:.properties, Spring, Disconf, Java

解決問題:如何正確使用.properties配置文件


    
     若是有其他代碼需要此Spring屬性配置, 將Spring配置中的屬性值設置遷移到外部的屬性文件中,是必需的操作,這也可以使Spring配置文件更易讀。在這里 我們 不僅要討論Spring的外部化配置,還要深入探討配置化文件(即.properties)的普遍應用方式。 這樣就可以在不用重新打包和重新部署應用的情況下,配置這些屬性值 。從 開發過程來看,將通用變量提出,並可配,也是寫出高可讀、低耦合代碼的必然途徑。 從結果來看,這對於靈活性地進行測試、運維工作,是非常有好處的。在開發時,我們盡量把部署時需要修改的信息提出放在文件中,方便部署人員部署。一個大型系統中,多個項目有相同的配置信息,則部署人員部署時需要對多個不同的文件修改相同的信息,這不是好的代碼結構,麻煩部署人員的同時,也增加了犯錯的可能性。下面,就是針對以上問題的解決方案。
 
一、原先的Spring配置
 
     下面是普通的Spring配置文件。可以看出,這里的value可以提出,以供其它代碼重用。
 
<bean id = "IndexHandler" name = "IndexHandler" class = "wang.anqi.util.IndexHandler" >
        <property name = "solrUrl" value = "http://192.8.125.30:8983/solr/core0" />
</bean>
 
 
二、經過改良后的配置
 
1、Spring配置
 
     下面是引入了兩個配置文件db.properties和solr.properties后的Spring配置文件。
 
<bean  class = "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
        <property name="locations">
            <list>
                <value>classpath:db.properties</value>
                <value>classpath:solr.properties</value>
            </list>
        </property>
</bean>
<bean id="IndexHandler" name="IndexHandler" class="wang.anqi.util.IndexHandler">
        <property name="solrUrl" value=
${solr.url} />
</bean>
 
     以下是配置文件 db.properties
 
db.ip = 192 . 8 . 125 . 201
db.name = aitanjupt
db.url = jdbc : mysql : //${db.ip}:3306/${db.name}
db.username = root
db.password = 1234
 
    配置文件solr.properties
 
solr.url = http : //192.8.125.30:8983/solr/core0
 
 
2、使用@Value注解來獲取配置
 
     屬性占位符配置的作用不限於XML中的Bean屬性配置。還可以用它來配置@Value注解的屬性。
 
public class IndexHandler
{
    @Value( "${solr.url}" )
    private String solrUrl;
}
 
 
     然而這種方式使用起來並不十分方便。你需要先在類里面申明一個屬性。
 
3、使用ResourceBundle來讀取配置
 
  1. privatestaticString myValue;
    static{
    try{
    ResourceBundle bundle =ResourceBundle
    .getBundle(PROPERTIES_FILE_NAME,Locale.ENGLISH);//PROPERTIES_FILE_NAME可以是solr.properties文件名的一部分:"solr"
    myValue = bundle.getString(MY_VALUE_KEY).trim();//MY_VALUE_KEY可以是solr.url
    }
    catch(Exception ex){
    System.err.println("[Property]:Can't Load property.properties");
    myValue ="default value";
    System.out.println("myValue will use the default value: "+ myValue);
    }
    }

     

  2.     這種方式使用起來比較方便。

 
三、 遠程 讀取配置文件
 
      只是通過以上方式來管理配置,尚覺不足。在一個比較大的系統中,很有可能多個子系統都需要使用相同配置的情況,當然,你可以將這些配置記入數據庫中並提供接口,自己管理起來。但是如果需要實時地將配置信息推送到不同的子系統中,情況就更將復雜了。
     可以 采用 Disconf作為分布式配置管理平台,D isconf是一套完整的基於zookeeper的分布式配置統一解決方案。支持配置(配置項+配置文件)的分布式化管理,配置發布統一化,極 簡的使用方式(注解式編程 或 XML代碼無代碼侵入模式), 低侵入性或無侵入性、強兼容性, 需要Spring編程環境 其依賴於: Mysql、 Tomcat、 Nginx、 zookeeeper Redis
   Disconf的缺陷在於安全問題,無需帳號登陸就可以下拉、下載各Properties。
    更多詳細介紹請移步 https://github.com/knightliao/disconf
 
 
 






免責聲明!

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



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