幾種placeholder替換項目參數的方法比較

引言:(引自:http://openwebx.org/docs/autoconfig.html)html

在一個應用中,咱們老是會遇到一些參數,例如:web

  • 數據庫服務器IP地址、端口、用戶名;spring

  • 用來保存上傳資料的目錄。數據庫

  • 一些參數,諸如是否打開cache、加密所用的密鑰名稱等等。apache

這些參數有一個共性,那就是:它們和應用的邏輯無關,只和當前環境、當前系統用戶相關。如下場景很常見:服務器

  • 在開發、測試、發佈階段,使用不一樣的數據庫服務器;框架

  • 在開發階段,使用Windows的A開發者將用戶上傳的文件存放在d:\my_upload目錄中,而使用Linux的B開發者將一樣的文件存放在/home/myname/my_upload目錄中。maven

  • 在開發階段設置cache=off,在生產環境中設置cache=on工具

很明顯,這些參數不適合被「硬編碼」在配置文件或代碼中。由於每個從源碼庫中取得它們的人,都有可能須要修改它們,使之與本身的環境相匹配測試

......

不少框架支持使用placeholder佔位符替換配置文件中的參數,而後在運行期或者編譯器讀取properties文件,完成動態配置。最近恰好研究了幾種使用佔位符替換配置的方法,故在此作個比較和總結: 

-------------------------我是分割線----------------------------

1.使用spring自帶的實體類來配置參數

Spring的框架中爲您提供了一個 BeanFactoryPostProcessor 的實做類別: org.springframework.beans.factory.config.PropertyPlaceholderConfigurer。藉由這個類別,您能夠將一些組態設定,移出至.properties檔案中,如此的安排可讓XML定義檔負責系統相關設定,而.properties檔能夠做爲客戶根據需求,自定義一些相關的參數。 

    <!--參數配置,參數過濾,使用properties替換佔位符 -->         
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:config/spring-daily.properties</value>
            </list>
        </property>
    </bean>

 

2.使用maven自帶的build設置來實現參數過濾

這是經過在build節點中添加filter和resource來實現的,在<build>標籤下有一個<filters>標籤,用於定義指定filter屬性的位置,例如filter元素賦值filters/filter1.properties,那麼這個文件裏面就能夠定義name=value對,這個name=value對的值就能夠在工程pom中經過${name}引用,默認的filter目錄是${basedir}/src/main/fiters/

    <filters> 
        <filter>src/main/filters/filter-${env}.properties</filter> 
    </filters> 
    <resources> 
        <resource> 
            <directory>src/main/resources</directory> 
            <filtering>true</filtering> 
        </resource>    
    </resources>

  

3.使用maven的插件maven-war-plugin來實現參數過濾

使用maven-war-plugin這個插件能夠在執行打包命令的時候指定我要打哪一個環境的包(具體方法不在這裏展開講),使用上比maven原生的filter機制要方便,功能也更強大

<filters>  
    <filter> src/main/resources/IProject-test.properties </filter>  
</filters>  
<plugin>  
    <groupId>org.apache.maven.plugins</groupId>  
    <artifactId>maven-war-plugin</artifactId>  
    <configuration>  
        <webResources>  
            <resource>  
                <directory>src/main/packageFilter</directory>  
                <filtering>true</filtering>  
                <targetPath>WEB-INF</targetPath>  
            </resource>  
        </webResources>  
    </configuration>  
</plugin> 

 

4.使用AutoConfig插件來實現參數過濾

AutoConfig是一種相似於Maven Filtering的工具。是阿里開發的,一款功能強大的參數過濾插件,具體功能和使用方法不在這裏展開講,想要進一步瞭解的去這裏:http://openwebx.org/docs/autoconfig.html

 

-------------------------我是分割線----------------------------

4種參數過濾方式的比較:

方法

優勢

缺點

替換參數的時期

上手難度

功能性

Spring插件

速度快

配置簡單

只能針對spring的bean起做用,其它配置內容沒法過濾

運行時

Maven原生設置

Maven自帶功能,不須要額外的插件

資源文件被複制到目標目錄時才起做用

功能偏弱

build時

偏弱

maven-war-plugin插件

能夠針對多套環境進行設置

覆蓋原文件

配置靈活

知足大部分需求

缺乏驗證機制

Build時期才執行所以速度較慢

 

build時

AutoConfig插件

有驗證機制;

功能強大

針對配置文件,不須要打包,所以不須要項目源代碼文件

教程較少

上手較難

build時

最複雜

最強

 

參考資料:

http://www.cnblogs.com/qq78292959/p/3711501.html

http://lishuaibt.iteye.com/blog/614783

http://nileader.blog.51cto.com/1381108/449956

http://openwebx.org/docs/autoconfig.html

相關文章
相關標籤/搜索