maven profile動(dòng)態(tài)選擇配置文件詳解
一、背景
在開發(fā)過程中,我們的軟件會(huì)面對不同的運(yùn)行環(huán)境,比如開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境,而我們的軟件在不同的環(huán)境中,有的配置可能會(huì)不一樣,比如數(shù)據(jù)源配置、日志文件配置、以及一些軟件運(yùn)行過程中的基本配置,那每次我們將軟件部署到不同的環(huán)境時(shí),都需要修改相應(yīng)的配置文件,這樣來回修改,很容易出錯(cuò),而且浪費(fèi)勞動(dòng)力。
maven提供了一種方便的解決這種問題的方案,就是profile功能。
二、profile簡介
profile可以讓我們定義一系列的配置信息,然后指定其激活條件。這樣我們就可以定義多個(gè)profile,然后每個(gè)profile對應(yīng)不同的激活條件和配置信息,從而達(dá)到不同環(huán)境使用不同配置信息的效果。
profile定義的位置
(1)針對于特定項(xiàng)目的profile配置我們可以定義在該項(xiàng)目的pom.xml中。(下面舉例是這種方式)
(2) 針對于特定用戶的profile配置,我們可以在用戶的settings.xml文件中定義profile。該文件在用戶家目錄下的“.m2”目錄下。
(3)全局的profile配置。全局的profile是定義在Maven安裝目錄下的“conf/settings.xml”文件中的。
三、配置動(dòng)態(tài)打包
1、配置profile
在項(xiàng)目的profile中添加如下的profile配置:
<profiles>
<profile>
<!-- 本地開發(fā)環(huán)境 -->
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
<activation>
<!-- 設(shè)置默認(rèn)激活這個(gè)配置 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!-- 發(fā)布環(huán)境 -->
<id>release</id>
<properties>
<profiles.active>release</profiles.active>
</properties>
</profile>
<profile>
<!-- 測試環(huán)境 -->
<id>beta</id>
<properties>
<profiles.active>beta</profiles.active>
</properties>
</profile>
</profiles>
這里定義了三個(gè)環(huán)境,分別是dev(開發(fā)環(huán)境)、beta(測試環(huán)境)、release(發(fā)布環(huán)境),其中開發(fā)環(huán)境是默認(rèn)激活的(activeByDefault為true),這樣如果在不指定profile時(shí)默認(rèn)是開發(fā)環(huán)境,也在package的時(shí)候顯示指定你要選擇哪個(gè)開發(fā)環(huán)境,詳情見后面。
2、配置文件
針對不同的環(huán)境,我們定義了不同的配置文件,文件目錄如下:

如圖所示,開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境的配置文件分別放到src/main/resources目錄下的config文件夾下。
config下有多個(gè)環(huán)境的配置文件,命名規(guī)則為是application-環(huán)境名稱.properties。
處理過程:
1)通過profile選中你要使用的環(huán)境
2)通過package命令,將環(huán)境變量注入到application.properties中(這樣子,那些公用的環(huán)境變量就不用在各個(gè)環(huán)境的配置文件中配置了)
3)項(xiàng)目中加載application.xml文件
加載配置文件
<context:property-placeholder location="classpath:application.properties"/>
例子:
application-beta.properties文件有如下部分內(nèi)容:
env.datasource.jdbcUrl=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&autoReconnect=true&zeroDateTimeBehavior=round env.datasource.username=root env.datasource.password=12233
application.properties有部分如下內(nèi)容用于注入上面的內(nèi)容:
datasource.jdbcUrl=${env.datasource.jdbcUrl}
datasource.username=${env.datasource.username}
datasource.password=${env.datasource.password}
3、maven資源插件配置
在pom.xml的build結(jié)點(diǎn)下,配置資源文件的位置,如下所示:
<build>
<finalName>seewo-admin</finalName>
<!-- 定義了變量配置文件的地址 -->
<filters>
<filter>src/main/resources/config/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>
這里注意一個(gè)參數(shù)<filtering>true</filtering>,一定要設(shè)置成true.這樣才會(huì)用對應(yīng)env目錄下的配置文件覆蓋原來的。
4、激活profile
1)默認(rèn)的激活
上面的profile配置中設(shè)置的默認(rèn)的激活環(huán)境。如下面所示
<activeByDefault>true</activeByDefault>
2)使用-P參數(shù)顯示激活一個(gè)profile
當(dāng)我們在進(jìn)行Maven操作時(shí)就可以使用-P參數(shù)顯示的指定當(dāng)前激活的是哪一個(gè)profile了。比如我們需要在對項(xiàng)目進(jìn)行打包的時(shí)候使用id為dev的profile,我們就可以這樣做:
mvn package –Pdev
這里假設(shè)dev是在settings.xml中使用dev標(biāo)記的處于激活狀態(tài)的profile,那么當(dāng)我們使用“-P !profile”的時(shí)候就表示在當(dāng)前操作中該profile將不處于激活狀態(tài)。
5、調(diào)用
private Logger logger = LogManager.getLogger(MyApp.class.getName());
其他的使用和log4j的是一樣的。
四、遇到的坑
在application.xml文件中不能出現(xiàn)@關(guān)鍵字,就算你注釋了也不行。當(dāng)出現(xiàn)@了,之后的所有環(huán)境變量將不會(huì)被注入
如:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- maven profile自動(dòng)切換環(huán)境參數(shù)的2種方法詳解
- 使用maven profile指定配置文件打包適用多環(huán)境的方法
- Maven管理SpringBoot Profile詳解
- 詳解Maven profile配置管理及激活profile的幾種方式
- maven的pom.xml中profiles的作用詳解
- maven多profile 打包下 -P參和-D參數(shù)的實(shí)現(xiàn)
- Maven 多profile及指定編譯問題的解決
- 詳解maven中profiles使用實(shí)現(xiàn)
- maven profile實(shí)現(xiàn)多環(huán)境配置的示例
- Maven profile實(shí)現(xiàn)不同環(huán)境的配置管理實(shí)踐
- maven中profile的使用
相關(guān)文章
SpringBoot集成redis實(shí)現(xiàn)共享存儲(chǔ)session
這篇文章主要介紹了SpringBoot集成redis實(shí)現(xiàn)共享存儲(chǔ)session的流程步驟,文中通過代碼示例介紹的非常詳細(xì),并總結(jié)了一些常見的錯(cuò)誤及解決方法,需要的朋友可以參考下2024-03-03
基于dubbo中Listener的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄赿ubbo中Listener的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08
Windows系統(tǒng)下Java連接SQL Server的方法簡介
這篇文章主要介紹了Windows系統(tǒng)下Java連接SQL Server的方法,分別是JDBC和JTDS的相關(guān)使用,需要的朋友可以參考下2015-09-09
Token登陸驗(yàn)證機(jī)制的原理及實(shí)現(xiàn)
這篇文章介紹了Token登陸驗(yàn)證機(jī)制的原理及實(shí)現(xiàn),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
springboot基于Mybatis mysql實(shí)現(xiàn)讀寫分離
這篇文章主要介紹了springboot基于Mybatis mysql實(shí)現(xiàn)讀寫分離,需要的朋友可以參考下2019-06-06
SpringBoot整合Mybatis-plus關(guān)鍵詞模糊查詢結(jié)果為空
SpringBoot整合Mybatis-plus使用關(guān)鍵詞模糊查詢的時(shí)候,數(shù)據(jù)庫中有數(shù)據(jù),但是無法查找出來,本文就來介紹一下SpringBoot整合Mybatis-plus關(guān)鍵詞模糊查詢結(jié)果為空的解決方法2025-04-04
SpringBoot整合MongoDB實(shí)現(xiàn)事務(wù)管理
Spring Boot是一種快速開發(fā)Spring應(yīng)用的方式,它提供了大量的自動(dòng)配置和默認(rèn)設(shè)置,以簡化開發(fā)流程,MongoDB是一個(gè)基于文檔的NoSQL數(shù)據(jù)庫,本文將介紹如何在Spring Boot應(yīng)用中整合MongoDB,并實(shí)現(xiàn)事務(wù)管理,需要的朋友可以參考下2024-07-07
使用@RequiredArgsConstructor注解來取代繁瑣的@Autowrired
有了@RequiredArgsConstructor注解,我們就可以減少@Autowired的書寫,本文主要介紹了使用@RequiredArgsConstructor注解來取代繁瑣的@Autowrired,感興趣的可以了解一下2022-04-04
SpringBoot啟動(dòng)流程SpringApplication準(zhǔn)備階段源碼分析
這篇文章主要為大家介紹了SpringBoot啟動(dòng)流程SpringApplication準(zhǔn)備階段源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04

