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)的時候大概率用的環(huán)境都不一樣(包括數(shù)據(jù)庫,redis等等)。
?? 一、多環(huán)境切換
多的不說,直接扔幾個yml配置文件,想必大家都眼熟

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

?? 二、Maven 多環(huán)境打包
上面我們已經(jīng)介紹了各個環(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>
<!--一個plugin的execution的目標(biāo)列表,也就是上面的id-->
<goals>
<goal>testResources</goal>
</goals>
<configuration>
<!-- 覆蓋原有文件 -->
<overwrite>true</overwrite>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
<!-- 待處理的資源定義 -->
<resources>
<resource>
<!-- 指定resources插件處理哪個目錄下的資源文件 -->
<directory>src/main/resources/${activatedEnv}</directory>
<filtering>false</filtering>
</resource>
</resources>
</configuration>
<!--這個plugin是否應(yīng)用到該P(yáng)OM的孩子POM,默認(rèn)true;-->
<inherited>false</inherited>
</execution>
</executions>
</plugin>
</plugins>
</build>大家可以根據(jù)需要去修改上面的配置信息。
然后在我們的 application.yml 配置動態(tài)的使用即可:active: @activatedEnv@
這里的 @activatedEnv@ ,使用的就是我們在pom.xml里設(shè)置的 <activatedEnv>
最后在Maven打包時,我們只需要指定參數(shù)就好了
// 開發(fā) mvn clean package -P dev // 生產(chǎn) mvn clean package -P prod
?? 三、擴(kuò)展
如果你的項(xiàng)目要打很多很多的包,同時又在多個地方使用,每個地方環(huán)境都不一樣,改怎么辦呢? 這樣一個個的搞豈不是要了老命。
這里只提供一個思路,有需要的家人可以看看,并不是最好的解決方案,不喜勿噴!
1、在你的項(xiàng)目中新建一個文件夾config,用來保存你的配置文件

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

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

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

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

6、再編寫一個腳本,去運(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)行這個bat文件等著就行了。
如果你們是用Jenkins 等自動化部署,請一定要忽略這古老的方式。切記!切記!!切記?。?!
到此這篇關(guān)于SpringBoot + Maven 多環(huán)境打包實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)SpringBoot Maven 多環(huán)境打包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot+Vue+axios實(shí)現(xiàn)文章收藏功能
這篇文章主要為大家詳細(xì)介紹了Springboot+Vue+axios實(shí)現(xiàn)文章收藏功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
IDEA創(chuàng)建springboot + mybatis項(xiàng)目全過程(步驟詳解)
這篇文章主要介紹了IDEA創(chuàng)建springboot + mybatis項(xiàng)目全過程及步驟詳解,本文通圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Springboot使用RabbitMQ實(shí)現(xiàn)關(guān)閉超時訂單(示例詳解)
介紹了如何在Spring Boot項(xiàng)目中使用RabbitMQ實(shí)現(xiàn)訂單的延時處理和超時關(guān)閉,通過配置RabbitMQ的交換機(jī)、隊(duì)列和綁定關(guān)系,以及編寫監(jiān)聽方法,實(shí)現(xiàn)了訂單數(shù)據(jù)的發(fā)送和延時消費(fèi),感興趣的朋友一起看看吧2025-01-01
hibernate 配置數(shù)據(jù)庫方言的實(shí)現(xiàn)方法
這篇文章主要介紹了hibernate 配置數(shù)據(jù)庫方言的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
基于SpringBoot實(shí)現(xiàn)圖片上傳與顯示
這篇文章主要為大家詳細(xì)介紹了基于SpringBoot實(shí)現(xiàn)圖片上傳與顯示,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08
Java 17 更新后的 strictfp 關(guān)鍵字
strictfp 可能是最沒有存在感的關(guān)鍵字了,很多人寫了多年 Java 甚至都不知道它的存在,strictfp,字面意思就是嚴(yán)格的浮點(diǎn)型。這玩意兒居然還有個關(guān)鍵字,可見其地位還是很高的。下面文章小編就帶大家詳細(xì)介紹其關(guān)鍵字,需要的朋友可以參考一下2021-09-09
一篇文章帶你入門Springboot沙箱環(huán)境支付寶支付(附源碼)
螞蟻沙箱環(huán)境 (Beta) 是協(xié)助開發(fā)者進(jìn)行接口功能開發(fā)及主要功能聯(lián)調(diào)的輔助環(huán)境。沙箱環(huán)境模擬了開放平臺部分產(chǎn)品的主要功能和主要邏輯2021-06-06

