技術匯總:第十章:Maven Profile動態(tài)選擇配置文件

Maven Profile
什么是MavenProfile

在我們平常的java開發(fā)中,會經(jīng)常使用到很多配制文件(xxx.properties,xxx.xml),而當我們在本地開發(fā)(dev),測試環(huán)境測試(test),線上生產(chǎn)使用(product)時,需要不停的去修改這些配制文件,次數(shù)一多,相當麻煩?,F(xiàn)在,利用maven的filter和profile功能,我們可實現(xiàn)在編譯階段簡單的指定一個參數(shù)就能切換配制,提高效率,還不容易出錯.

profile可以讓我們定義一系列的配置信息,然后指定其激活條件。這樣我們就可以定義多個profile,然后每個profile對應不同的激活條件和配置信息,從而達到不同環(huán)境使用不同配置信息的效果。
 Maven Profile入門

修改pinyougou-page-web的pom.xml

     <properties>
          <port>9105</port>
      </properties>
      <build>  
          <plugins>        
              <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                    <configuration>
                        <!-- 指定端口 -->
                        <port>${port}</port>
                        <!-- 請求路徑 -->
                        <path>/</path>
                    </configuration>
                </plugin>
          </plugins> 
        </build>

運行tomcat7:run ,發(fā)現(xiàn)運行結果是一樣的,因為port是變量,而變量值是定義為9105。這其實就是我們之前學習的maven的變量。

那我們現(xiàn)在思考一下,如果這個端口在開發(fā)時使用9105,如果在生產(chǎn)環(huán)境(或其他環(huán)境)為9205呢?如何解決值的動態(tài)切換呢?

這時我們修改pom.xml,增加profile定義

      <profiles>
          <profile>
              <id>dev</id>
              <properties>
                  <port>9105</port>
              </properties>
          </profile>
          <profile>
              <id>pro</id>
              <properties>
                  <port>9205</port>
              </properties>
          </profile> 
      </profiles>

執(zhí)行命令 tomcat7:run -P pro  發(fā)現(xiàn)以9205端口啟動

執(zhí)行命令 tomcat7:run -P dev  發(fā)現(xiàn)以9105端口啟動

-P 后邊跟的是profile的id

如果我們只執(zhí)行命令tomcat7:run ,也是以9105啟動,因為我們一開始定義的變量值就是9105,就是在不指定profileID時的默認值.

 
切換數(shù)據(jù)庫連接配置
編寫不同環(huán)境的配置文件

(1)我們在pinyougou-dao工程中src/main/resources下創(chuàng)建filter文件夾

(2)filter文件夾下創(chuàng)建db_dev.properties ,用于配置開發(fā)環(huán)境用到的數(shù)據(jù)庫

env.jdbc.driver=com.mysql.jdbc.Driver

env.jdbc.url=jdbc:mysql://localhost:3306/pinyougoudb?characterEncoding=utf-8

env.jdbc.username=root

env.jdbc.password=123456

(3)filter文件夾下創(chuàng)建db_pro.properties  

env.jdbc.driver=com.mysql.jdbc.Driver

env.jdbc.url=jdbc:mysql://localhost:3306/pinyougoudb_pro?characterEncoding=utf-8

env.jdbc.username=root

env.jdbc.password=123456

(4)修改properties下的db.properties

jdbc.driver=${env.jdbc.driver}

jdbc.url=${env.jdbc.url}

jdbc.username=${env.jdbc.username}

jdbc.password=${env.jdbc.password}
定義Profile

修改pom.xml

      <properties>
              <env>dev</env>
      </properties>
      <profiles>
          <profile>
              <id>dev</id>
              <properties>
                  <env>dev</env>
              </properties>
          </profile>   
          <profile>
              <id>pro</id>
              <properties>
                  <env>pro</env>
              </properties>
          </profile>
      </profiles>

這里我們定義了2個profile,分別是開發(fā)環(huán)境和生產(chǎn)環(huán)境
資源過濾與變量替換

修改pom.xml ,在build節(jié)點中添加如下配置

   <filters>

   <filter>src/main/resources/filters/db_${env}.properties</filter>

   </filters>

   <resources>

   <resource>

   <directory>src/main/resources</directory>

   <filtering>true</filtering>

   </resource>  

   </resources>

這里我們利用filter實現(xiàn)對資源文件(resouces) 過濾
maven filter可利用指定的xxx.properties中對應的key=value對資源文件中的${key}進行替換,最終把你的資源文件中的username=${key}替換成username=value
打包

在pinyougou-dao 工程 執(zhí)行命令:package -P pro ,  解壓生成的jar包,觀察db.properties配置文件內容,已經(jīng)替換為生產(chǎn)環(huán)境的值。

在pinyougou-sellergoods-service工程 執(zhí)行命令 pageage  ,解壓生成的war包里的pinyougou-dao的jar包,發(fā)現(xiàn)也是生成環(huán)境的值。
測試運行

【1】連接生產(chǎn)數(shù)據(jù)庫

(1)在pinyougou-dao 工程執(zhí)行命令:install -P pro

(2)在pinyougou-sellergoods-service:執(zhí)行命令:tomcat7:run

(3)在pinyougou-shop-web :  執(zhí)行命令:tomcat7:run

【2】連接開發(fā)數(shù)據(jù)庫

(1)在pinyougou-dao 工程執(zhí)行命令:install -P dev  (或 install   )

(2)在pinyougou-sellergoods-service:執(zhí)行命令:tomcat7:run

(3)在pinyougou-shop-web :  執(zhí)行命令:tomcat7:run
切換注冊中心連接配置
集中配置注冊中心地址

在pinyougou-common工程中properties下創(chuàng)建dubbox.properties

address=192.168.0.135:2181

Spring目錄下創(chuàng)建spring配置文件 applicationContext-dubbox.xml 配置如下:

<dubbo:registry protocol="zookeeper" address="${address}"/>

所有的服務工程與web工程都要依賴pinyougou-common . 并刪除每個工程中關于注冊中心地址的配置  

安裝pinyougou-common到本地倉庫,然后測試運行。
MavenProfile配置

在pinyougou-common工程中創(chuàng)建filters目錄 ,目錄下建立dubbox_dev.properties

env.address=192.168.25.135:2181

建立dubbox_pro.properties

env.address=192.168.25.136:2181

修改dubbox.properties

address=${env.address}

修改pinyougou-common的pom.xml

    <properties>
            <env>dev</env>   
    </properties>
     <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <env>dev</env>
            </properties>
        </profile>
        <profile>
            <id>pro</id>
            <properties>
                <env>pro</env>
            </properties>
        </profile>
    </profiles>
    .............................
     <build>
            <filters>
                <filter>src/main/resources/filters/dubbox_${env}.properties</filter>
            </filters>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
                </resource>   
            </resources>   
      </build>

參考資料:https://www.cnblogs.com/0201zcr/p/6262762.html