maven Profile配置不同環境

Maven根據Profile讀取不同配置環境配置文件

原創 2016年07月09日 16:39:20

開發需求:在日常開發中,我們大多都會有開發環境(dev)、測試環境(test)、生產環境(product),不同環境的參數肯定不一樣,我們需要在打包的時候,不同環境打不同當包,如果手動改,一方面效率低,容易出錯,而且每次打包都改動,麻煩,所以Maven給我們提供了profile的配置


先貼一段代碼,然後後面講一些概念

1、首先需求就是有三個環境,每個環境的配置參數不一樣,希望在打包的時候,不同環境用的配置數據不一樣


2、配置文件

  1. #這是dev環境配置  
  2. jdbc_url=jdbc:mysql://127.0.0.1:3306/abcdev  
  3. jdbc_user=root  
  4. jdbc_password=root  

  1. #這是test環境配置  
  2. jdbc_url=jdbc:mysql://192.168.1.180:3306/abcdev  
  3. jdbc_user=test_user  
  4. jdbc_password=test_password  

  1. #這是product環境配置  
  2. jdbc_url=jdbc:mysql://10.6.8.30:3306/abcdev  
  3. jdbc_user=product_user  
  4. jdbc_password=product_password  

下面是spring 數據庫連接配置中一段代碼,其中數據庫連接url, username, password用${key}這種方式

  1. <!-- 創建數據庫連接 -->  
  2.    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">  
  3.        <!-- 數據庫驅動 -->  
  4.        <!-- 基本屬性 url、user、password -->  
  5.        <property name="url" value="${jdbc_url}" />  
  6.        <property name="username" value="${jdbc_user}" />  
  7.        <property name="password" value="${jdbc_password}" />  
  8.   
  9.        <!-- 配置初始化大小、最小、最大 -->  
  10.        <property name="initialSize" value="1" />  
  11.        <property name="minIdle" value="1" />  
  12.        <property name="maxActive" value="20" />  
  13.   
  14.        <!-- 配置獲取連接等待超時的時間 -->  
  15.        <property name="maxWait" value="60000" />  
  16.   
  17.        <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連接,單位是毫秒 -->  
  18.        <property name="timeBetweenEvictionRunsMillis" value="60000" />  
  19.   
  20.        <!-- 配置一個連接在池中最小生存的時間,單位是毫秒 -->  
  21.        <property name="minEvictableIdleTimeMillis" value="300000" />  
  22.   
  23.        <property name="validationQuery" value="SELECT 'x'" />  
  24.        <property name="testWhileIdle" value="true" />  
  25.        <property name="testOnBorrow" value="false" />  
  26.        <property name="testOnReturn" value="false" />  
  27.   
  28.        <!-- 打開PSCache,並且指定每個連接上PSCache的大小 -->  
  29.        <property name="poolPreparedStatements" value="true" />  
  30.        <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />  
  31.   
  32.        <!-- 配置監控統計攔截的filters -->  
  33.        <property name="filters" value="stat" />  
  34.   
  35.    </bean>  

3、pom一些配置

  1. <profiles>  
  2.         <profile>  
  3.             <id>dev</id>  
  4.             <properties>  
  5.                 <profiles.active>dev</profiles.active>  
  6.             </properties>  
  7.             <activation>  
  8.                 <activeByDefault>true</activeByDefault>  
  9.             </activation>  
  10.             <build>  
  11.                 <filters>  
  12.                     <filter>src/main/resources/dev.properties</filter>  
  13.                 </filters>  
  14.             </build>  
  15.         </profile>  
  16.         <profile>  
  17.             <id>test</id>  
  18.             <properties>  
  19.                 <profiles.active>test</profiles.active>  
  20.             </properties>  
  21.             <build>  
  22.                 <filters>  
  23.                     <filter>src/main/resources/test.properties</filter>  
  24.                 </filters>  
  25.             </build>  
  26.         </profile>  
  27.         <profile>  
  28.             <id>prod</id>  
  29.             <properties>  
  30.                 <profiles.active>prod</profiles.active>  
  31.             </properties>  
  32.             <build>  
  33.                 <filters>  
  34.                     <filter>src/main/resources/prod.properties</filter>  
  35.                 </filters>  
  36.             </build>  
  37.         </profile>  
  38.     </profiles>  

  1. <build>  
  2.         <finalName>myweb</finalName>  
  3.         <resources>  
  4.             <resource>  
  5.                 <directory>src/main/resources</directory>  
  6.                 <includes>  
  7.                     <include>**/*</include>  
  8.                 </includes>  
  9.                 <filtering>true</filtering>  
  10.                 <excludes>  
  11.                     <exclude>application-text.xml</exclude>  
  12.                     <!--<exclude>src/main/resources/application-text.xml</exclude>-->  
  13.                 </excludes>  
  14.             </resource>  
  15.         </resources>  
  16.         <!--<filters>-->  
  17.             <!--<filter>src/main/resources/${profiles.active}.properties</filter>-->  
  18.         <!--</filters>-->  
  19.     </build>  

4、最終,執行一個命令,mvn clean package ,我們看下編譯後target下面的採用${key}有沒有替換



我們看到已經替換爲dev的數據庫連接,如果想打test的包呢,很簡單: mvn clean package -Ptest


好,到此爲止,滿足了我們的一個基本需求,我們來重點看看pom中的上面貼的配置


分析profile相關概念


1、profiles:定義各個環境的變量配置,我上面的代碼中有三個環境,所以配了3個profile

     <id>:profile的標示

    <properties>:自己定義的一些屬性,可有可無,比如我配置的jdbc.url這些屬性,如果不想通過properties定義這些,可以在改屬性下面配置

    <filters>比較重要,指定當前profile環境下,屬性文件路徑;


分析build下屬性


我們分析下<resource>下面的屬性

<directory>: 配置那個目錄下的文件通過${key}會被替換成屬性值,resource目錄下,我們一般放jdbc連接,或配置文件

<includes>:指定那個目錄下那個文件

<filtering>:這個配置的意思是過濾上面指定屬性文件中的佔位符,佔位符是${變量名稱}這樣的形式,maven會自動讀取配置文件,然後解析其中的佔位符,使用上面pom文件中定義的屬性進行替換

<exclueds>:在resource目錄下,有很多文件,但用些文件不希望替換,則可以通過<excluede>指定

<filters>:這裏的filters與<profile>的filter意思一樣,都是指屬性文件地址,這個如果上面定義<profile>的時候指定了,這裏就不需要了,但有些開發習慣是在<profile>不定義,然後在<build>裏指定。


好了,只有簡單配置這些,在使用maven命令的時候 mvn clean package -PprofileId,就可以根據不同環境打不同的包了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章