maven多環境配置


我們在開發項目的時候,往往會有好幾個環境。比如開發、預發布(測試)、產品,每個環境一般用到配置都不一樣,最典型的就是數據庫,開發的數據庫與產品的數據庫肯定是不一樣的,如果要多個環境的切換就得改配置,這樣一來非常麻煩。然而程序員是一群非常會偷懶的家伙,於是就有了多環境配置這個功能,以上純屬我在胡說八道。。。

使用的開發工具為idea,一般來說我們都會在src/main/resources 目錄下面建一個文件夾,里面分別放三個環境對應的文件dev、pre、pro,如下:

我們實際項目中引用的配置文件是config.properties

redis.host=${redis_host}
redis.port=${redis_port}
redis.password=${redis_password}


driver=${db_driver}
url=${db_url}
username=${db_username}
password=${db_password}

把在config.properties文件中所有用到的變量都放到對於環境的文件夾中,例如dev.properties文件內容:

redis_host=127.0.0.1
redis_port=7777
redis_password=eoooxy


db_driver=com.mysql.jdbc.Driver
db_url=jdbc:mysql://localhost:3306/anhoo
db_username=root
db_password=root

做好上面的准備工作之后,就需要在pom里面進行設置了三個環境對應的變量:

  <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <env>dev</env>
                <!--<redis_host>127.0.0.1</redis_host>-->
            </properties>
        </profile>
        <profile>
            <id>pre</id>
            <properties>
                <env>pre</env>
            </properties>
        </profile>
        <profile>
            <id>pro</id>
            <properties>
                <env>pro</env>
            </properties>
        </profile>
    </profiles>

以及在<build>節點里面添加:

<finalName>${project.artifactId}</finalName>

        <!-- 使用指定的filter進行過濾,在執行mvn命令的時候帶上-Ppro就代表生產環境,就會加載生產環境的properties,-Pdev就代表開發環境(默認) -->
        <filters>
            <filter>src/main/resources/properties/env/${env}.properties</filter>
        </filters>

        <!-- 資源文件位置src/main/resources/,這下面的資源文件的${}會全部被替換成filter中的標簽內容。
                 directory指定的value會作為classes的資源跟目錄,
                 比如指定:src/main/resources/,則classes下會出現jdbc等包,
                 若指定:src/main/resources/jdbc/,則classes下直接出現jdbc包下的文件,不會額外出現jdbc等其他包結構。因為他把jdbc作為了根目錄
         -->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <!--
                      exclude可以排除指定文件,支持通配符 ,匹配項不會生成到classes目錄下,路徑是以directory開始的
                      在這里就是directory(src/main/resources/)/properties/env/pro.properties
                 -->
                <!--<excludes>-->
                <!--<exclude>properties/env/pro.properties</exclude>-->
                <!--</excludes>-->
            </resource>
        </resources>

當然我們也可以把所有的變量放在pom的環境分類的properties節點里面,如被注釋的部分,這樣一來也是可以的,當然如果這樣做的話,filters部分就多此一舉了,而且我們可以直接在.xml文件中進行這些變量的引用。兩種方法效果都一樣,沒啥區別,就看個人愛好了。

打包命令:

mvn clean package -P(對應的環境的id,要把括號去掉且是緊挨着大寫的P)

這樣一來,打包好的war包,里面對應的配置就變了。。。

 

如果錯誤懇請指出,謝謝!!

參考:http://www.jianshu.com/p/5650e5738d30

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM