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

Maven Profile
什么是MavenProfile

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

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

修改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>
                        <!-- 請(qǐng)求路徑 -->
                        <path>/</path>
                    </configuration>
                </plugin>
          </plugins> 
        </build>

運(yùn)行tomcat7:run ,發(fā)現(xiàn)運(yùn)行結(jié)果是一樣的,因?yàn)閜ort是變量,而變量值是定義為9105。這其實(shí)就是我們之前學(xué)習(xí)的maven的變量。

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

這時(shí)我們修改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端口啟動(dòng)

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

-P 后邊跟的是profile的id

如果我們只執(zhí)行命令tomcat7:run ,也是以9105啟動(dòng),因?yàn)槲覀円婚_(kāi)始定義的變量值就是9105,就是在不指定profileID時(shí)的默認(rèn)值.

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

(1)我們?cè)趐inyougou-dao工程中src/main/resources下創(chuàng)建filter文件夾

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

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個(gè)profile,分別是開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境
資源過(guò)濾與變量替換

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

   <filters>

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

   </filters>

   <resources>

   <resource>

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

   <filtering>true</filtering>

   </resource>  

   </resources>

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

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

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

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

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

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

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

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

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

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

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

在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}"/>

所有的服務(wù)工程與web工程都要依賴pinyougou-common . 并刪除每個(gè)工程中關(guān)于注冊(cè)中心地址的配置  

安裝pinyougou-common到本地倉(cāng)庫(kù),然后測(cè)試運(yùn)行。
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