Maven管理SpringBoot Profile詳解
1. Spring Profile
Spring可使用Profile絕對(duì)程序在不同環(huán)境下執(zhí)行情況,包含配置、加載Bean、依賴(lài)等。
Spring的Profile一般項(xiàng)目包含:dev(開(kāi)發(fā)), test(單元測(cè)試), qa(集成測(cè)試), prod(生產(chǎn)環(huán)境)。由spring.profiles.active屬性絕定啟用的profile。
SpringBoot的配置文件默認(rèn)為 application.properties(或yaml,此外僅心properties配置為說(shuō)明)。不同Profile下的配置文件由application-{profile}.properties管理,同時(shí)獨(dú)立的 Profile配置文件會(huì)覆蓋默認(rèn)文件下的屬性。
2. Maven Profile
Maven同樣也有Profile設(shè)置,可在構(gòu)建過(guò)程中針對(duì)不同的Profile環(huán)境執(zhí)行不同的操作,包含配置、依賴(lài)、行為等。
Maven的Profile由 pom.xml 的<Profiles>標(biāo)簽管理。每個(gè)Profile中可設(shè)置:id(唯一標(biāo)識(shí)), properties(配置屬性), activation(自動(dòng)觸發(fā)的邏輯條件), dependencies(依賴(lài))等。
此文章不對(duì)Spring和Maven的Profile作過(guò)多說(shuō)明,詳細(xì)情況請(qǐng)自行查閱。
3. Maven 管理 Spring Profile
由于構(gòu)建是基于Maven(或Gradle,此處僅以Maven說(shuō)明)。所以使用Maven管理Spring構(gòu)建時(shí)的Profile是非常方便的。
Maven管理Spring Profile分五步,以下詳細(xì)介紹。
3.1 去掉默認(rèn)的 Tomcat依賴(lài)
在SpringBoot MVC項(xiàng)目中,默認(rèn)以?xún)?nèi)嵌Tomcat運(yùn)行,如果需要特殊的設(shè)置或者使用Undertow,需要去掉默認(rèn)的Tomcat依賴(lài):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>
如果你同時(shí)使用了 MyBatis,需要去掉tomcat-jdbc依賴(lài):
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jdbc</artifactId> </exclusion> </exclusions> </dependency>
3.2 Maven Profile設(shè)置
在項(xiàng)目(如果有模塊為具體模塊)的pom.xml下設(shè)置:
<!-- Maven控制Spring Profile --> <profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <profileActive>dev</profileActive> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jdbc</artifactId> </dependency> </dependencies> </profile> <profile> <id>prod</id> <properties> <profileActive>prod</profileActive> </properties> </profile> </profiles>
從上面的配置可以看出,Maven的Profile配置了兩個(gè):dev和prod,并且在dev中使用了內(nèi)嵌Tomcat,而 prod 中沒(méi)有,所以這兩個(gè)Profile打包的文件dev可以直接運(yùn)行(Plugin使用了SpringBoot Plugin),而prod并不能直接運(yùn)行(或部署在外部Tomcat下,并不推薦這樣,后面會(huì)說(shuō)明)。
properties中的profileActive是我們申明的屬性,此處對(duì)應(yīng)Spring的Profile值。
3.3 Maven資源過(guò)濾
SpringBoot的 Profile選擇需要在 application.properties中配置,如果定死在文件,那么每次打包都需要手動(dòng)修改,很麻煩,而且容易出錯(cuò)。
Maven的資源過(guò)濾功能可以實(shí)現(xiàn)在構(gòu)建時(shí)修改以“@xxx@”表示的屬性。資源過(guò)濾需要在pom.xml的<build>標(biāo)簽下配置 resources:
<!-- profile對(duì)資源的操作 --> <resources> <resource> <directory>src/main/resources</directory> <excludes> <exclude>application*.properties</exclude> </excludes> </resource> <resource> <directory>src/main/resources</directory> <!-- 是否替換@xx@表示的maven properties屬性值 --> <filtering>true</filtering> <includes> <include>application.properties</include> <include>application-${profileActive}.properties</include> </includes> </resource> </resources>
上面的第一個(gè)resource去掉了src/main/resources下的所有application.properties文件,“”是通配符,表示此處有任何內(nèi)容(沒(méi)有也可以)都匹配。
第二個(gè)resource添加了application.properties默認(rèn)配置文件和由profileActive屬性決定的相應(yīng)profile配置文件。并且filtering為true表示,會(huì)將文件內(nèi)容的“@xx@”替換為相應(yīng)的變量(如文件中的@profileActive@會(huì)替換為profileActive屬性值)。
3.4 Spring配置Profile
在application.properties默認(rèn)配置文件中配置:
spring.profiles.active = @profileActive@
@profileActive@表示該屬性值會(huì)在maven構(gòu)建時(shí)被替換掉。
3.5 構(gòu)建
構(gòu)建命令:
mvn clean package -Pdev
上面的命令會(huì)根據(jù)Maven Profile的 dev構(gòu)建環(huán)境包,如果需要prod包,則把-P的參數(shù)替換成prod即可。
為了方便我會(huì)在每個(gè)項(xiàng)目下生成一個(gè)build.sh文件,內(nèi)容如下:
#!/bin/bash profileActive=prod if [ -n "$1" ]; then profileActive=$1 fi mvn clean package -Dmaven.test.skip=true -P$profileActive
該腳本接收一個(gè)參數(shù),即打包對(duì)應(yīng)的Profile。默認(rèn)情況下如果不帶參數(shù),會(huì)打包prod環(huán)境包。
需要注意的是,該命令跳過(guò)了測(cè)試。
4. 總結(jié)
完成了上面的五步,即可使項(xiàng)目根據(jù)你的構(gòu)建參數(shù)的不同,打包出不同環(huán)境下運(yùn)行的包。
第1步去掉了SpringBoot內(nèi)嵌的tomcat和tomcat-jdbc。使得我們可以決定在什么情況下使用何種容器運(yùn)行我們的項(xiàng)目。
第2步配置了Maven構(gòu)建Porfile,使得構(gòu)建可根據(jù)我們的指令分發(fā)不同的包。
第3步配置了Maven資源過(guò)濾,不僅使得不同Profile下的資源文件互不可見(jiàn),且替換了資源文件中以“@xx@”表示的屬性值。
第4步使Spring的Profile由Maven決策,這樣,我們就不用每次打包都修改Spring的Profile配置了。
第5步展示了如何執(zhí)行不同Profile下的構(gòu)建命令,并且使用了一個(gè)Shell腳本方便我們執(zhí)行構(gòu)建和跳過(guò)測(cè)試(多數(shù)時(shí)候我們?cè)跇?gòu)建項(xiàng)目時(shí)先測(cè)試,并不需要在構(gòu)建時(shí)測(cè)試,測(cè)試和構(gòu)建的解耦使得我們更專(zhuān)注。但同時(shí),如果你忘記了前置測(cè)試,也可能會(huì)引發(fā)未察覺(jué)的測(cè)試問(wèn)題)。
以上就是本文關(guān)于Maven管理SpringBoot Profile詳解的全部?jī)?nèi)容,希望對(duì)大家有所幫助。歡迎參閱:maven學(xué)習(xí)-初窺門(mén)徑、使用maven運(yùn)行Java Main的三種方法解析等,有什么問(wèn)題可以留言,歡迎大家交流討論。
- maven profile自動(dòng)切換環(huán)境參數(shù)的2種方法詳解
- 使用maven profile指定配置文件打包適用多環(huán)境的方法
- 詳解Maven profile配置管理及激活profile的幾種方式
- maven的pom.xml中profiles的作用詳解
- maven多profile 打包下 -P參和-D參數(shù)的實(shí)現(xiàn)
- Maven 多profile及指定編譯問(wèn)題的解決
- 詳解maven中profiles使用實(shí)現(xiàn)
- maven profile實(shí)現(xiàn)多環(huán)境配置的示例
- maven profile動(dòng)態(tài)選擇配置文件詳解
- Maven profile實(shí)現(xiàn)不同環(huán)境的配置管理實(shí)踐
- maven中profile的使用
相關(guān)文章
idea雙擊圖標(biāo)打不開(kāi),無(wú)反應(yīng)的解決
這篇文章主要介紹了idea雙擊圖標(biāo)打不開(kāi),無(wú)反應(yīng)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09Springboot使用SPI注冊(cè)bean到spring容器的示例代碼
這篇文章主要介紹了Springboot使用SPI注冊(cè)bean到spring容器,主要包括mydriver接口,mysqldriver實(shí)現(xiàn)過(guò)程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10詳解Maven profile配置管理及激活profile的幾種方式
這篇文章主要介紹了詳解Maven profile配置管理及激活profile的幾種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01SpringCloud?GateWay網(wǎng)關(guān)示例代碼詳解
這篇文章主要介紹了SpringCloud?GateWay網(wǎng)關(guān),Spring?cloud?Gateway的功能很多很強(qiáng)大,文中提到了Spring?Cloud?Gateway中幾個(gè)重要的概念,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2022-04-04SWT(JFace)體驗(yàn)之ApplicationWindow
SWT(JFace)體驗(yàn)之ApplicationWindow2009-06-06使用mybatis-plus分頁(yè)出現(xiàn)兩個(gè)Limit的問(wèn)題解決
在使用MyBatis-Plus進(jìn)行分頁(yè)查詢(xún)時(shí),可能會(huì)遇到查詢(xún)SQL中出現(xiàn)兩個(gè)limit語(yǔ)句的問(wèn)題,這通常是由于在多個(gè)模塊中重復(fù)引入了MyBatis-Plus的分頁(yè)插件所導(dǎo)致的,下面就來(lái)介紹一下如何解決,感興趣的可以了解一下2024-10-10