一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|JavaScript|易語(yǔ)言|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - maven profile自動(dòng)切換環(huán)境參數(shù)的2種方法詳解

maven profile自動(dòng)切換環(huán)境參數(shù)的2種方法詳解

2021-04-24 11:41vbirdbest Java教程

這篇文章主要給大家介紹了關(guān)于maven profile自動(dòng)切換環(huán)境參數(shù)的2種方法,文中通過示例代碼將這兩種方法介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

痛點(diǎn):

在java開發(fā)的過程中,我們經(jīng)常要面對(duì)各種各樣的環(huán)境,比如開發(fā)環(huán)境,測(cè)試環(huán)境,正式環(huán)境,而這些環(huán)境對(duì)項(xiàng)目的需求也不相同。

在此之前,我們往往需要手動(dòng)去修改相對(duì)應(yīng)的配置文件然后打成war,才能部署到相應(yīng)的環(huán)境上。

但是這樣很容易出現(xiàn)問題,因?yàn)楹苋菀壮霈F(xiàn)少改或者漏改,造成不必要的麻煩

幻想:

要是有一種東西,能讓我們打war的時(shí)候指定一個(gè)參數(shù),就能自動(dòng)把項(xiàng)目編譯成對(duì)應(yīng)環(huán)境的war,那該有多幸福啊!!!

結(jié)果:這樣的東西還真有,那就是maven-profile

在開發(fā)過程中,我們經(jīng)常會(huì)根據(jù)不同的環(huán)境配置不同的參數(shù),如數(shù)據(jù)源的ip,username,password、url、秘鑰等都會(huì)不同,傳統(tǒng)方式是在一個(gè)配置文件中通過修改properties文件中的參數(shù)值或者通過注釋解注釋來達(dá)到目的,這樣不僅容易出錯(cuò),還浪費(fèi)不必要的時(shí)間,更重要的是把代碼發(fā)布到測(cè)試環(huán)境或者生產(chǎn)環(huán)境還容易忘記改。為解決這種問題,maven提供了一種解決方案,就是profile。

下圖為傳統(tǒng)方式,需要來回的注釋和解注釋

maven profile自動(dòng)切換環(huán)境參數(shù)的2種方法詳解

profile定義的位置

  • 針對(duì)于特定項(xiàng)目的profile配置我們可以定義在該項(xiàng)目的pom.xml中。
  • 針對(duì)于特定用戶的profile配置,我們可以在用戶的settings.xml文件中定義profile。該文件在用戶家目錄下的“.m2”目錄下。
  • 全局的profile配置。全局的profile是定義在maven安裝目錄下的“conf/settings.xml”文件中的。

filter方式實(shí)現(xiàn)

第一步:分別定義application-dev.properties、application-test.properties、application-pro.properties三個(gè)文件

application-dev.properties

?
1
2
env.jdbc.username=dev
env.jdbc.password=123456

application-test.properties

?
1
2
env.jdbc.username=test
env.jdbc.password=888888

application-pro.properties

?
1
2
env.jdbc.username=root
env.jdbc.password=666666

第二步:定義總的屬性文件application.properties,該文件中的值去引用application-<env>.properties中的key

application.properties

?
1
2
3
4
5
6
// 引用application-<env>中的key
jdbc.username=${env.jdbc.username}
jdbc.password=${env.jdbc.password}
 
# 公共配置
salt=123456789

第三步:配置profile

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<profiles>
 <profile>
 <!-- 開發(fā)環(huán)境 -->
 <id>dev</id>
 <properties>
 <env>dev</env>
 </properties>
 <activation>
 <!-- 設(shè)置默認(rèn)激活這個(gè)配置 -->
 <activebydefault>true</activebydefault>
 </activation>
 </profile>
 <profile>
 <!-- 測(cè)試環(huán)境 -->
 <id>test</id>
 <properties>
 <env>test</env>
 </properties>
 </profile>
 <profile>
 <!-- 發(fā)布環(huán)境 -->
 <id>pro</id>
 <properties>
 <env>pro</env>
 </properties>
 </profile>
 </profiles>

第四步:配置filter和resource

${env}就是在mvn package -p <env>的名字,這樣就告訴application.properties中應(yīng)用的key是那個(gè)屬性文件的key了

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<build>
 <finalname>profile-app</finalname>
 <!-- 定義了變量配置文件的地址 -->
 <filters>
 <filter>src/main/resources/config/application/application-${env}.properties</filter>
 </filters>
 
 <resources>
 <resource>
 <directory>src/main/resources</directory>
 <filtering>true</filtering>
 </resource>
 </resources>
 
 <plugins>
 <plugin>
 <groupid>org.apache.maven.plugins</groupid>
 <artifactid>maven-war-plugin</artifactid>
 </plugin>
 </plugins>
 </build>

打包運(yùn)行

?
1
2
3
4
5
// 如果不指定環(huán)境,默認(rèn)是activebydefault=true的環(huán)境,當(dāng)前是指開發(fā)環(huán)境
mvn package
 
// 打包指定的環(huán)境通過-p 參數(shù),注意p是大寫的
mvn package -p <env>

maven profile自動(dòng)切換環(huán)境參數(shù)的2種方法詳解

從mvn packege -p test運(yùn)行的結(jié)果中可以看到生成的target目錄下classes/application.perperties中的jdbc.username和jdbc.password 就是application-test.properties中配置的env.jdbc.username和env.jdbc.password的值。

在spring中如果要使用屬性配置文件,直接引入這個(gè)總的配置文件即可,其他的環(huán)境配置文件的使命已經(jīng)結(jié)束了。
<context:property-placeholder location="classpath:application.properties"/>

實(shí)現(xiàn)原理:

在pom.xml中為每個(gè)不同的環(huán)境定義不同的profile,每個(gè)profile都有一個(gè)環(huán)境名稱,然后為不同環(huán)境定義不同的配置文件(如application-<env>.properties), 再定義一個(gè)總的屬性文件(如application.properties), 然后讓application.properties的value去引用application-<env>.properties中對(duì)應(yīng)的key,在打包時(shí)指定要打包的環(huán)境的名稱即可,這樣application.properties中的key的值就是相對(duì)應(yīng)環(huán)境application-<env>.properties對(duì)應(yīng)的值了。

多resource實(shí)現(xiàn)方式

步驟

第一步:在src/main/resource創(chuàng)建一個(gè)env目錄,再創(chuàng)建各個(gè)環(huán)境的子目錄,再再各個(gè)環(huán)境子目錄下創(chuàng)建名為config.properties的文件,每個(gè)鍵相同,值不同。
env/dev/config.properties

?
1
2
jdbc.username=dev
jdbc.password=123456

env/test/config.properties

?
1
2
jdbc.username=test
jdbc.password=888888

env/pro/config.properties

?
1
2
jdbc.username=root
jdbc.password=666666

第二步:創(chuàng)建一個(gè)與環(huán)境無關(guān)的application.properties

application.properties

?
1
2
# 公共配置
salt=123456789

第三步:配置profiles

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<profiles>
 <profile>
 <!-- 開發(fā)環(huán)境 -->
 <id>dev</id>
 <properties>
 <env>dev</env>
 </properties>
 <activation>
 <!-- 設(shè)置默認(rèn)激活這個(gè)配置 -->
 <activebydefault>true</activebydefault>
 </activation>
 </profile>
 <profile>
 <!-- 測(cè)試環(huán)境 -->
 <id>test</id>
 <properties>
 <env>test</env>
 </properties>
 </profile>
 <profile>
 <!-- 發(fā)布環(huán)境 -->
 <id>pro</id>
 <properties>
 <env>pro</env>
 </properties>
 </profile>
</profiles>

第四步:配置resource

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<build>
 <finalname>profile-app</finalname>
 <!-- 定義了變量配置文件的地址 -->
 <resources>
 <resource>
 <directory>src/main/resources</directory>
 <excludes>
 <exclude>env/dev/*</exclude>
 <exclude>env/test/*</exclude>
 <exclude>env/pro/*</exclude>
 </excludes>
 <filtering>true</filtering>
 </resource>
 <resource>
 <directory>src/main/resources/env/${env}</directory>
 <includes>
 <include>*.*</include>
 <include>**/*.xml</include>
 <include>**/*.properties</include>
 </includes>
 <filtering>true</filtering>
 </resource>
 </resources>
 
 <plugins>
 <plugin>
 <groupid>org.apache.maven.plugins</groupid>
 <artifactid>maven-war-plugin</artifactid>
 </plugin>
 </plugins>
</build>

第五步:運(yùn)行 mvn package -p test

maven profile自動(dòng)切換環(huán)境參數(shù)的2種方法詳解

如果經(jīng)常使用mvn package -p <env>可以在idea中配置一些maven, 步驟為:edit configurations… —– + —- maven —- 分別為每個(gè)環(huán)境添加maven 命令,以后雙擊run configureations中的任意一個(gè)就是相當(dāng)于運(yùn)行mvn package -p <env>命令了

maven profile自動(dòng)切換環(huán)境參數(shù)的2種方法詳解

maven profile自動(dòng)切換環(huán)境參數(shù)的2種方法詳解

兩種方式比較

filter方式會(huì)把所有的application-dev.properties、application-test.properties、application-pro.properties文件都會(huì)打包進(jìn)去,而且此種方式只能針對(duì)屬性文件,如果有其他文件(如.xml)也根據(jù)不同的環(huán)境有不同的配置,這種方式是不好處理。

多resource方式在打包時(shí)只打包指定環(huán)境的配置文件,可以將各種文件放到各自的環(huán)境文件夾中,在打包的時(shí)候會(huì)將整個(gè)文件夾都打包進(jìn)去。推薦此種方式

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)服務(wù)器之家的支持。

原文鏈接:https://blog.csdn.net/vbirdbest/article/details/78744786

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美影院一区二区三区 | 精品国产成人a区在线观看 精品高潮呻吟99AV无码视频 | 睡男神的这件小事小说在线阅读 | 好大好硬好深好爽想要之黄蓉 | 国产精品一区久久精品 | 精品小视频在线观看 | 羞羞答答免费人成黄页在线观看国产 | hh99me福利毛片 | 免费观看国产精品 | 国产精品午夜久久 | 99国产情在线视频 | 无人视频在线观看完整版高清 | 国产成人精品一区二区阿娇陈冠希 | 色老板美国在线观看 | 欧美亚洲国产成人不卡 | 波多野结中文字幕在线69视频 | 国产乱妇无码大片在线观看 | 古代双性美人被老糟蹋 | 亚洲 无码 制服 日韩 | 亚洲香蕉网久久综合影院3p | 日韩性公交车上xxhd免费 | 视频一区国产精戏刘婷 | 草女人逼 | 3d动漫美女被吸乳羞羞有 | 精品小视频在线观看 | 97久久免费视频 | 俄罗斯12一15处交 | 香港三级血恋3 | 亚洲www在线 | 超级毛片 | 国产农村乱子伦精品视频 | 免费一级特黄特色大片在线观看 | 蜜桃久久久亚洲精品成人 | 国产裸舞在线一区二区 | 欧美成人aaaa免费高清 | 91夜夜人人揉人人捏人人添 | 天堂俺去俺来也www久久婷婷 | 性做久久久久久久久老女人 | 国产综合色在线视频区色吧图片 | 欧美摸胸| 久久青青草原精品国产软件 |