一、什么是Maven多環(huán)境配置击吱?
** 在開發(fā)的過程中淋淀,經常需要面對不同的運行環(huán)境(開發(fā)環(huán)境、測試環(huán)境、生產環(huán)境朵纷、內網環(huán)境炭臭、外網環(huán)境等等),在不同的環(huán)境中袍辞,相關的配置一般不一樣鞋仍,比如數(shù)據源配置、日志文件配置搅吁、以及一些軟件運行過程中的基本配置威创。每次在不同環(huán)境部署程序時,都需要修改相應的配置文件谎懦,使之完成環(huán)境的配置肚豺。這么做存在一個比較大的問題:每次修改配置非常麻煩,而且配置錯誤會產生不可預估的影響界拦,比如吸申,在發(fā)布生產環(huán)境時用的開發(fā)環(huán)境的配置還好,但如果在開發(fā)環(huán)境下用生產環(huán)境的數(shù)據享甸,將會造成生產數(shù)據的污染截碴,導致生產環(huán)境崩潰。這就是多環(huán)境配置蛉威! **
二日丹、怎么用?
** 在maven中實現(xiàn)多環(huán)境的構建可移植性需要使用profile蚯嫌,通過不同的環(huán)境激活不同的profile來達到構建的可移植性哲虾。 **
- ** 項目目錄結構 **
- ** 代碼 **
jdbc.properties
jdbc.driver=${jdbc_driver}
jdbc.url=${jdbc_url}
jdbc.username=${jdbc_username}
jdbc.password=${jdbc_password}
filter-dev-env.properties
jdbc_driver=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://127.0.0.1:3306/dev
jdbc_username=root
jdbc_password=123456
filter-pro-env.properties
jdbc_driver=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://127.0.0.1:3306/pro
jdbc_username=root
jdbc_password=123456
filter-test-env.properties
jdbc_driver=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://127.0.0.1:3306/test
jdbc_username=root
jdbc_password=123456
pom.xml
<profiles>
<profile>
<!-- 本地開發(fā)環(huán)境 -->
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
<!-- 默認是本地開發(fā)環(huán)境 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!-- 測試環(huán)境 -->
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
</profile>
<profile>
<!-- 生產環(huán)境 -->
<id>pro</id>
<properties>
<profiles.active>pro</profiles.active>
</properties>
</profile>
</profiles>
<build>
<!-- maven模塊化的話最好從父類繼成取,打成包的命名 -->
<finalName>${artifactId}-${version}</finalName>
<!-- 使用指定的filter進行過濾择示,在執(zhí)行mvn命令的時候帶上-Ppro就代表生產環(huán)境妒牙,就會加載生產環(huán)境的properties,-Pdev就代表開發(fā)環(huán)境(默認) -->
<filters>
<filter>src/main/resources/multiEnv/filter-${profiles.active}-env.properties</filter>
</filters>
<!-- 配置需要被替換的資源文件路徑, jdbc.properties -->
<resources>
<resource>
<!--
資源文件位置src/main/resources/,這下面的資源文件的${}會全部被替換成filter中的標簽內容对妄。
directory指定的value會作為classes的資源跟目錄湘今,
比如指定:src/main/resources/,則classes下會出現(xiàn)jdbc等包剪菱,
若指定:src/main/resources/jdbc/摩瞎,則classes下直接出現(xiàn)jdbc包下的文件,不會額外出現(xiàn)jdbc等其他包結構孝常。因為他把jdbc作為了根目錄
-->
<directory>src/main/resources/</directory>
<!-- 在某個resource中如果設置filtering為true旗们,將會根據輸入參數(shù)動態(tài)修改相關內容。 -->
<filtering>true</filtering>
<!-- 排除標簽 -->
<excludes>
<!--
exclude可以排除指定文件构灸,支持通配符 ,匹配項不會生成到classes目錄下上渴,路徑是以directory開始的
在這里就是directory(src/main/resources/)/multiEnv/filter-*-env.properties
-->
<exclude>multiEnv/filter-*-env.properties</exclude>
<!-- **/*.xml 代表 directory(src/main/resources/)目錄以及所有子目錄的xml文件-->
<!--
<exclude>**/*.xml</exclude>
<exclude>**/*.properties</exclude>
-->
</excludes>
<!-- 包含標簽 -->
<!--
<includes>
<include></include>
</includes>
-->
</resource>
</resources>
</build>
** 如何運行? **
打包時,自己肯定知道是生產環(huán)境還是部署環(huán)境稠氮,所以只需要在打包的時候加上參數(shù)即可曹阔,如下:
打本地開發(fā)環(huán)境包:mvn clean package -Pdev
打部署上線環(huán)境包:mvn clean package -Ppro
打測試環(huán)境包:mvn clean package -Ptest
-
執(zhí)行完命令后可以發(fā)現(xiàn)classes下的jdbc.properties變成了如下
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/pro
jdbc.username=root
jdbc.password=123456
上面配置文件隨著打包不同內容不同,會將filter-dev-env.properties隔披、filter-pro-env.properties赃份、filter-test-env.properties三個文件的內容分別注入
若有興趣,歡迎來加入群奢米,【Java初學者學習交流群】:458430385抓韩,此群有Java開發(fā)人員、UI設計人員和前端工程師鬓长。有問必答谒拴,共同探討學習,一起進步涉波!
歡迎關注我的微信公眾號【Java碼農社區(qū)】彪薛,會定時推送各種干貨: