1. 程式人生 > >maven 動態配置與釋出

maven 動態配置與釋出

一、背景

  在開發過程中,我們的軟體會面對不同的執行環境,比如開發環境、測試環境、生產環境,而我們的軟體在不同的環境中,有的配置可能會不一樣,比如資料來源配置、日誌檔案配置、以及一些軟體執行過程中的基本配置,那每次我們將軟體部署到不同的環境時,都需要修改相應的配置檔案,這樣來回修改,很容易出錯,而且浪費勞動力。

  maven提供了一種方便的解決這種問題的方案,就是profile功能。

二、profile簡介

  profile可以讓我們定義一系列的配置資訊,然後指定其啟用條件。這樣我們就可以定義多個profile,然後每個profile對應不同的啟用條件和配置資訊,從而達到不同環境使用不同配置資訊的效果。

  profile定義的位置

(1)    針對於特定專案的profile配置我們可以定義在該專案的pom.xml中。(下面舉例是這種方式)

(2)    針對於特定使用者的profile配置,我們可以在使用者的settings.xml檔案中定義profile。該檔案在使用者目錄下的“.m2”目錄下。

(3)    全域性的profile配置。全域性的profile是定義在Maven安裝目錄下的“conf/settings.xml”檔案中的。

1、配置profile

  在專案的profile中新增如下的profile配置:

<profiles>
        <profile>
            <!-- 本地開發環境 -->
            <id>dev</id>
            <properties>
                <profiles.active>dev</profiles.active>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <!-- 測試環境 -->
            <id>test</id>
            <properties>
                <profiles.active>test</profiles.active>
            </properties>
        </profile>
        <profile>
            <!-- 生產環境 -->
            <id>prod</id>
            <properties>
                <profiles.active>prod</profiles.active>
            </properties>
        </profile>
        <profile>
            <!-- 生產環境 -->
            <id>prod_sg</id>
            <properties>
                <profiles.active>prod_sg</profiles.active>
            </properties>
        </profile>
    </profiles>

 這裡定義了三個環境,分別是dev(開發環境)、test(測試環境)、prod(釋出環境1)、prod_sg(釋出環境2),其中開發環境是預設啟用的(activeByDefault為true),這樣如果在不指定profile時預設是開發環境,也在package的時候顯示指定你要選擇哪個開發環境,詳情見後面。

2、配置檔案

  針對不同的環境,我們定義了不同的配置檔案,檔案目錄如下:

如圖所示,開發環境、測試環境、生產環境的配置檔案分別放到src/main/resources目錄下的config資料夾下。

  config下有多個環境的配置檔案,命名規則為是application-環境名稱.properties。

  處理過程:

1)通過profile選中你要使用的環境

2)通過package命令,將環境變數注入到application.properties中(這樣子,那些公用的環境變數就不用在各個環境的配置檔案中配置了)

3)專案中載入application.xml檔案

 

載入配置檔案

<context:property-placeholder location="classpath:application.properties"/>

例子:

application-test.properties檔案有如下部分內容:

env.datasource.jdbcUrl=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&autoReconnect=true&zeroDateTimeBehavior=round
env.datasource.username=root
env.datasource.password=12233

application.properties有部分如下內容用於注入上面的內容:

datasource.jdbcUrl=${env.datasource.jdbcUrl}
datasource.username=${env.datasource.username}
datasource.password=${env.datasource.password}

3、maven資源外掛配置

  在pom.xml的build結點下,配置資原始檔的位置,如下所示:

 

<build>
        <finalName>seewo-admin</finalName>
        <!-- 定義了變數配置檔案的地址 -->
        <filters>  
      <filter>src/main/resources/config/application-${profiles.active}.properties</filter>
        </filters>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
<!-- 這裡注意一個引數<filtering>true</filtering>,一定要設定成true.這樣才會用對應profiles.active目錄下的配置檔案覆蓋原來的 -->
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

4、啟用profile

1)預設的啟用

  上面的profile配置中設定的預設的啟用環境。如下面所示

<activeByDefault>true</activeByDefault> 

2)使用-P引數顯示啟用一個profile

  當我們在進行Maven操作時就可以使用-P引數顯示的指定當前啟用的是哪一個profile了。比如我們需要在對專案進行打包的時候使用id為dev的profile,我們就可以這樣做:

mvn package –Pdev

   這裡假設dev是在settings.xml中使用dev標記的處於啟用狀態的profile,那麼當我們使用“-P !profile”的時候就表示在當前操作中該profile將不處於啟用狀態。