SpringBoot + Maven 多環(huán)境打包實(shí)現(xiàn)方法
各位家人,本次我們介紹一下SpringBoot + Maven 的項(xiàng)目在不同的環(huán)境下的配置,以及不同環(huán)境下的打包。
做為開發(fā),大家在日常的工作當(dāng)中肯定都有環(huán)境的切換操作,這些也都是我們開發(fā)的一些常規(guī)操作了,畢竟在開發(fā),測試,生產(chǎn)的時(shí)候大概率用的環(huán)境都不一樣(包括數(shù)據(jù)庫,redis等等)。
?? 一、多環(huán)境切換
多的不說,直接扔幾個(gè)yml配置文件,想必大家都眼熟

這三個(gè)文件中:
- application.yml 是啟動(dòng)服務(wù)時(shí),Spring會(huì)自動(dòng)加載的配置文件
- application-dev.yml 代表的是開發(fā)環(huán)境時(shí)的配置文件
- application-pro.yml 代表的是生產(chǎn)環(huán)境的配置文件
但是請大家注意:
后面這兩個(gè)文件在SpringBoot服務(wù)啟動(dòng)時(shí),Spring并不會(huì)自動(dòng)加載他們,想讓他們加載還需要我們在application.yml 中添加一些配置如下所示。
application.yml:
spring:
profiles:
# active: @activatedEnv@
# 此時(shí)加載dev開發(fā)環(huán)境
active: dev
# 此時(shí)加載pro生產(chǎn)環(huán)境
# active: pro對應(yīng)關(guān)系如下圖所示:
在服務(wù)啟動(dòng)加載的時(shí)候,服務(wù)器就會(huì)加載
application.yml文件,然后通過配置去調(diào)用application-dev.yml文件,選擇開發(fā)環(huán)境。當(dāng)然如此,當(dāng)active:prod,那么服務(wù)在啟動(dòng)時(shí),Spring就會(huì)調(diào)用application-prod.yml文件進(jìn)入生產(chǎn)環(huán)境。

?? 二、Maven 多環(huán)境打包
上面我們已經(jīng)介紹了各個(gè)環(huán)境直接的切換,但是想要完成多環(huán)境的打包還需要再pom中添加對應(yīng)的依賴
pom.xml:
<!--多環(huán)境打包-->
<profiles>
<!--開發(fā)-->
<profile>
<id>dev</id>
<properties>
<!-- 環(huán)境標(biāo)識,需要與配置文件的名稱相對應(yīng) -->
<activatedEnv>dev</activatedEnv>
</properties>
<activation>
<!-- 默認(rèn)環(huán)境 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--生產(chǎn)-->
<profile>
<id>pro</id>
<properties>
<activatedEnv>pro</activatedEnv>
</properties>
</profile>
</profiles>
<!-- 構(gòu)建項(xiàng)目需要的信息 -->
<build>
<!--最終 Jar 包的名字-->
<finalName>Jesus-${activatedEnv}</finalName>
<!--Maven的打包插件-->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 作為DOM對象的配置 -->
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<!-- resource插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>test-resources</id>
<!--目標(biāo)執(zhí)行的階段,具體值看Maven的生命周期列表;-->
<phase>compile</phase>
<!--一個(gè)plugin的execution的目標(biāo)列表,也就是上面的id-->
<goals>
<goal>testResources</goal>
</goals>
<configuration>
<!-- 覆蓋原有文件 -->
<overwrite>true</overwrite>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
<!-- 待處理的資源定義 -->
<resources>
<resource>
<!-- 指定resources插件處理哪個(gè)目錄下的資源文件 -->
<directory>src/main/resources/${activatedEnv}</directory>
<filtering>false</filtering>
</resource>
</resources>
</configuration>
<!--這個(gè)plugin是否應(yīng)用到該P(yáng)OM的孩子POM,默認(rèn)true;-->
<inherited>false</inherited>
</execution>
</executions>
</plugin>
</plugins>
</build>大家可以根據(jù)需要去修改上面的配置信息。
然后在我們的 application.yml 配置動(dòng)態(tài)的使用即可:active: @activatedEnv@
這里的 @activatedEnv@ ,使用的就是我們在pom.xml里設(shè)置的 <activatedEnv>
最后在Maven打包時(shí),我們只需要指定參數(shù)就好了
// 開發(fā) mvn clean package -P dev // 生產(chǎn) mvn clean package -P prod
?? 三、擴(kuò)展
如果你的項(xiàng)目要打很多很多的包,同時(shí)又在多個(gè)地方使用,每個(gè)地方環(huán)境都不一樣,改怎么辦呢? 這樣一個(gè)個(gè)的搞豈不是要了老命。
這里只提供一個(gè)思路,有需要的家人可以看看,并不是最好的解決方案,不喜勿噴!
1、在你的項(xiàng)目中新建一個(gè)文件夾config,用來保存你的配置文件

2、修改pom文件,在里面添加你需要的環(huán)境配置,我這里是根據(jù)不同的城市來切換環(huán)境

3、同樣的編寫你需要的build

4、指定你配置文件的路徑,讓maven打包的時(shí)候去對應(yīng)的地方拿對應(yīng)的配置文件:

5、編寫一大堆腳本文件,用于打包

6、再編寫一個(gè)腳本,去運(yùn)行這些腳本,并且把打好的jar包拿到指定地點(diǎn)
MvnBuildAll-EapStdAll-js-test.bat:
@echo off chcp 936 :INPUT echo ===================命令列表======================= echo 命令編號: 1 語意:執(zhí)行打包文件本機(jī)倉庫安裝 -install echo 命令編號: 9 語意:退出控制臺 -quit echo ===================命令列表======================= echo 請輸入你要選擇的命令: set /p cmd= IF %cmd% == 1 GOTO INSTALL IF %cmd% == 9 GOTO END :INSTALL echo ===================mvnbulid-gcc.bat======================= call D: call cd D:\workspace\code\eap-std\eap-std-webapp\buildzjtest call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-gcc.bat echo ===================copy war to build-new-war ======================= call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-gcc-js-test.war D:\workspace\maven_jar\zjtest echo ============================ next continue ============================ echo ===================mvnbulid-baseservice.bat======================= call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-baseservice.bat echo ===================copy war to build-new-war ======================= call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-baseservice-js-test.war D:\workspace\maven_jar\zjtest echo ============================ next continue ============================ echo ===================mvnbulid-platform.bat======================= call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-platform.bat echo ===================copy war to build-new-war ======================= call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-platform-js-test.war D:\workspace\maven_jar\zjtest echo ============================ next continue ============================ echo ===================mvnbulid-manage.bat======================= call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-manage.bat echo ===================copy war to build-new-war ======================= call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-manage-js-test.war D:\workspace\maven_jar\zjtest echo ============================ next continue ============================ echo ===================mvnbulid-tcservice.bat======================= call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-tcservice.bat echo ===================copy war to build-new-war ======================= call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-tcservice-js-test.war D:\workspace\maven_jar\zjtest echo ============================ next continue ============================ echo ===================mvnbulid-scm.bat======================= call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-scm.bat echo ===================copy war to build-new-war ======================= call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-scm-js-test.war D:\workspace\maven_jar\zjtest echo ============================ next continue ============================ echo ===================mvnbulid-cas.bat======================= call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-cas.bat echo ===================copy war to build-new-war ======================= call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-cas-js-test.war D:\workspace\maven_jar\zjtest echo ============================ next continue ============================ echo ===================mvnbulid-userconsole.bat======================= call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-userconsole.bat echo ===================copy war to build-new-war ======================= call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-userconsole-js-test.war D:\workspace\maven_jar\zjtest echo ============================ next continue ============================ echo ===================mvnbulid-analysis.bat======================= call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-analysis.bat echo ===================copy war to build-new-war ======================= call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-analysis-js-test.war D:\workspace\maven_jar\zjtest echo ============================ next continue ============================ echo ===================mvnbulid-mqlis.bat======================= call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-mqlis.bat echo ===================copy war to build-new-war ======================= call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-mqlis-js-test.war D:\workspace\maven_jar\zjtest echo ============================ next continue ============================ echo ===================mvnbulid-dep.bat======================= call D:\workspace\code\eap-std\eap-std-webapp\buildzjtest\mvnbulid-dep.bat echo ===================copy war to build-new-war ======================= call copy D:\workspace\code\eap-std\eap-std-webapp\target\eap-std-dep-js-test.war D:\workspace\maven_jar\zjtest echo ===================執(zhí)行完畢======================= :END echo ===================按任意鍵退出======================= @pause
最后你只需要運(yùn)行這個(gè)bat文件等著就行了。
如果你們是用Jenkins 等自動(dòng)化部署,請一定要忽略這古老的方式。切記!切記??!切記!??!
到此這篇關(guān)于SpringBoot + Maven 多環(huán)境打包實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)SpringBoot Maven 多環(huán)境打包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
談?wù)凷pring AOP中@Aspect的高級用法示例
在Spring AOP中目前只有執(zhí)行方法這一個(gè)連接點(diǎn),下面這篇文章主要給大家介紹了關(guān)于Spring AOP中@Aspect的高級用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08
Java使用Canal同步MySQL數(shù)據(jù)到Redis
在現(xiàn)代微服務(wù)架構(gòu)中,數(shù)據(jù)同步是一個(gè)常見的需求,特別是將?MySQL?數(shù)據(jù)實(shí)時(shí)同步到?Redis,下面我們就來看看Java如何使用Canal同步MySQL數(shù)據(jù)到Redis吧2024-11-11
Springboot視頻接口報(bào)大量的ClientAbortException找不到原因的解決
本文主要介紹了Springboot視頻接口報(bào)大量的ClientAbortException找不到原因的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
詳解Mybatis中javaType和ofType的區(qū)別
本文主要介紹了詳解Mybatis中javaType和ofType的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05

