您好,登錄后才能下訂單哦!
前言
目前,企業項目的開發過程中,往往會使用配置文件來做一些配置項來實現項目部署的靈活性,避免硬編碼的方式在環境變化時需要對代碼進行重新編譯。但是往往在項目周期中存在著各種環境:如開發環境、測試環境以及生產環境等,而且在不同的運行環境中可能牽扯到大量的配置項變化。如果在不同的部署環境中切換,對配置文件的管理往往容易讓程序員感覺非常的混亂。
為了避免這種換亂,研發過程中也有比較多的手段進行。比如,有公司就采用VPN的虛擬網絡環境,讓測試環境、生產環境的網絡一致,讓程序員在不同環境中對版本進行發布時只需要對VPN進行切換即可。以免發生網絡配置項改錯,漏改等現象的發生。這樣個人覺得還不錯,唯一有一點句是調整網絡環境、設備環境的成本應該也比較高。
當然profile的方式應該算是比較經濟的。我知道的比如spring-boot、maven都可以支持到profile的方式來對不同環境進行指定。本文希望介紹一下,我理解的使用maven的profile方式來進行不同環境切換。講得不到位的地方希望看官嘴下留情,也多指定。
Maven 的 profile:
在maven的 pom.xml
文件中有一個配置項叫著profiles
節點,如下:
<profiles> <profile> <id>test</id> <properties> <active.profile>test</active.profile> <jdbc.url>127.0.0.1</jdbc.url> </properties> <activation> <activeByDefault>false</activeByDefault> </activation> </profile> <profile> <id>develop</id> <properties> <active.profile>develop</active.profile> <jdbc.url>192.168.1.102</jdbc.url> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>product</id> <properties> <actived.profile>product</actived.profile> <jdbc.url>10.21.41.100</jdbc.url> </properties> <activation> <activeByDefault>false</activeByDefault> </activation> </profile> </profiles>
其中profiles
節點下可以填寫多個profile
其中profile
主要包含了三個屬性id
、properties
、activation
。
id
應該是為了區分profile
用的。
properties
就是對應的屬性。
activation
應該是主要用來指定是否被默認激活的,它還有一個子節點activeByDefault
, 如果子節點activeByDefault
內的值為true表示他會被激活。它還有一些子節點,但是不知道什么用。后續看看在學習下。
實踐前期準備
我準備建立一個簡單的maven功能來實踐一下maven的profile
實現不同的配置管理,所以首先需要建議一個maven工程。本文采用的是idea進行試驗的。一下是我建立工程的結構圖。
由于我只是需要對配置文件進行管理,所以是完全不需要建立任何java類就可以的。
profile
相關的配置文件 develop.properties
、 product.properties
、 test.properties
app.name
,三個文件中分別為 develop.maven.profile
、 product.maven.profile
、 test.maven.profile
.application.properties
、 application.xml
.application.properties 的內容為:
application.xml的內容為:
實踐一:
實踐一主要采用profile
+ filter
的方式實現內容的注入。
該方式的思想是通過 filter下的文件編寫可變動的配置項,由filters
標簽引入不同的配置文件項,然后提取不同的配置文件中的配置項填充到resources
下的配置文件中。
所以其中的關鍵標簽包含了 profile
filter
resource
Maven的配置文件pom.xml
的內容如下
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>maven-test</artifactId> <groupId>com.maomao.maven</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>maven-profile</artifactId> <version>1.0-SNAPSHOT</version> <profiles> <profile> <id>test</id> <properties> <active.profile>test</active.profile> </properties> <activation> <activeByDefault>false</activeByDefault> </activation> </profile> <profile> <id>develop</id> <properties> <active.profile>develop</active.profile> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>product</id> <properties> <actived.profile>product</actived.profile> </properties> <activation> <activeByDefault>false</activeByDefault> </activation> </profile> </profiles> <build> <filters> <filter>src/filters/${active.profile}.properties</filter> </filters> <resources> <resource> <!--一定要讓filtering為true 否則無法對內容進行注入--> <filtering>true</filtering> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> </resources> </build> </project>
執行maven命令進行打包:
mvn clean install
執行后打包結果targets
文件夾下的配置文件application.properties
、 application.xml
的占位置被填充。
當然如果切換profiles
下的激活項,填充的內容自然也會發生變化。或者采用maven命令進行激活項的切換:
mvn clean package -Ptest # 指定激活項的ID
實踐二:
實踐二主要采用profile
直接將屬性配置到了profile
下的properties
節點下。此方法就不在需要多余的filter
properties文件配置了。
例如:
<profile> <id>product</id> <properties> <actived.profile>product</actived.profile> <jdbc.url>10.21.41.100</jdbc.url> </properties> <activation> <activeByDefault>false</activeByDefault> </activation> </profile>
這里properites
中多了一個jdbc.url
屬性。那我們的application.properties
文件中同樣適用兩個占位符
app.name=${app.name} jdbc.url=${jdbc.url}
同樣執行maven
命令進行打包:
mvn clean install -Pproduct
打包之后的 application.properties
內容對應變為
結束語
整個內容寫的有點亂,但是意思大概就是這個意思。主要想說maven可以搞這樣一個事情。也給自己留個備忘錄。如果有人來看到這個希望輕噴,我很少寫東西。最近準備練習寫東西,待改進的地方還是很多的,所以見諒了。
到此這篇關于Maven profile實現不同環境的配置管理實踐的文章就介紹到這了,更多相關Maven profile配置管理內容請搜索億速云以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持億速云!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。