Maven多環境打包配置

一、啟動時指定環境配置文件

在啟動springboot應用的jar包時,我們可以指定配置文件,通常把配置文件上傳到linux服務器對應jar包的同級目錄,或者統一的配置文件存放目錄

   java -jar your-app.jar --spring.config.location=/opt/softs/applications-prod.yaml

實際可以把配置文件路徑spring.config.location后面的替換成你自己的存放路徑,把配置文件放到服務器上可以很方便的隨時修改內容。
以上說的是在啟動jar包的時候指定配置文件,那么如何在maven打jar包的時候同時把指定配置文件打包進去,直接啟動就好了?請看接下來的分析

二、maven多環境打包配置

首先創建一個springboot應用(如果是微服務,且每個服務都是springboot應用的話,都按照同樣的配置即可,筆者這里是為了舉例說明),大概的結構如下
在這里插入圖片描述
代碼結構不重要,重點是pom文件和配置文件怎么配置

多個配置文件創建

假設現在有三個環境,分別是開發環境、測試環境、生產環境,這也是標準的開發、測試、上線流程所需要的軟件環境。筆者在src/main/resources下創建了四個配置文件
在這里插入圖片描述

application.yaml

這個是主配置文件,里面可以配置一些通用和基礎的配置,比如連接數據,mybatis等等

spring:profiles:active: @environment@datasource:# 數據庫連接信息driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/usertest?useSSL=false&serverTimezone=UTCusername: rootpassword: root
mybatis:# MyBatis配置mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.execute.batch.executebatch.mapperconfiguration:map-underscore-to-camel-case: truelog-impl: org.apache.ibatis.logging.stdout.StdOutImpl

也可以只配置如下

spring:profiles:active: @environment@

筆者這里只配置了如下內容,active是使用哪個環境的配置,這里是一個變量,先不管后面再說明
在這里插入圖片描述

application-dev.yaml

這個是開發環境配置,配置如下
在這里插入圖片描述
端口號,和數據庫配置,mybatis配置。數據庫配置一般在各個環境使用的都不同,所以應該分別配置到對應環境下的配置文件中。mybatis配置這個一般是不變的,一般可以放在上面的application.yaml主配置文件中,不過筆者這里沒有動了。
開發環境端口號是4455

application-test.yaml

這個是測試環境配置,內容如下
在這里插入圖片描述
內容同上,只是端口不一樣,為6677

application-prod.yaml

生產環境配置文件
在這里插入圖片描述
生產環境的端口號是7788

pom文件配置

首先是profiles配置

<profiles><profile><!--不同環境Profile的唯一id--><id>dev</id><!--默認激活dev 環境--><activation><activeByDefault>true</activeByDefault></activation><properties><!--environment是自定義的字段(名字隨便起),自定義字段可以有多個,確保與配置文件一致--><environment>dev</environment></properties></profile><profile><id>prod</id><activation><activeByDefault>false</activeByDefault></activation><properties><environment>prod</environment></properties></profile><profile><id>test</id><activation><activeByDefault>false</activeByDefault></activation><properties><environment>test</environment></properties></profile></profiles>

有三組profile,分別對應三個環境dev、prod、test
注: < e n v i r o n m e n t > d e v < / e n v i r o n m e n t > <environment>dev</environment> <environment>dev</environment>這個environment標簽可以隨意定義,只要application.yaml里面能對應上就行
在這里插入圖片描述
build配置

    <!-- 打包需要引入對應環境的配置文件 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!--打包時跳過測試--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>3.1.2</version><configuration><skipTests>true</skipTests></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><executions><execution><id>default-resources</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><outputDirectory>target/classes</outputDirectory><useDefaultDelimiters>false</useDefaultDelimiters><delimiters><delimiter>@</delimiter></delimiters><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/resources/</directory><filtering>true</filtering><includes><include>**/*.yaml</include></includes></resource><resource><directory>src/main/resources/</directory><excludes><exclude>**/*.yaml</exclude></excludes></resource></resources></configuration></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-antrun-plugin</artifactId><version>1.3</version><executions><execution><id>print-custom-info</id><phase>package</phase><configuration><tasks><!--suppress UnresolvedMavenProperty --><echo message="[INFO] ${environment} 環境打包執行成功"/></tasks></configuration><goals><goal>run</goal></goals></execution></executions></plugin></plugins></build>

有兩個需要注意的點
首先第一個打包時跳過測試的配置
在這里插入圖片描述
這樣我們在打包生產環境時的命令

mvn clean package -Pprod

而不是下面的,去掉了 -Dmaven.test.skip=true

mvn clean package -Pprod -Dmaven.test.skip=true

第二個分割符解析
在這里插入圖片描述
這里的配置實際上是為了識別下面配置的@符號,從環境變量中讀取具體哪個環境
在這里插入圖片描述
注:上面的@符號可以換成其他的符號分割比如*或者&,一般還是不換比較好

三、IDEA啟動調整

以上配置好后,IDEA啟動就無法啟動了,發現無法識別主配置里的自定義變量
在這里插入圖片描述
這個是我們打包時候用到的,IDEA啟動自然無法識別,打開右側的maven配置,會發現多了幾個配置文件(native 和nativeTest這兩個是maven自己生成的不用管),我們勾選上dev
在這里插入圖片描述
再次點擊啟動,發現啟動成功了,這個主要是我們自己開發本地測試時使用
在這里插入圖片描述
當你有使用其他環境,比如使用test環境啟動的需求時,把dev勾選取消,仍然還有灰色的暗勾選,此時maven沒有自動刷新。勾選上test后,點擊左上角的刷新按鈕,就會變成如下界面
在這里插入圖片描述
再次啟動,就會使用測試環境配置啟動了
在這里插入圖片描述

四、指定環境打包

有了以上的環境配置準備,我們就可以在打包時指定配置,而不是運行時指定配置環境了,筆者使用的時idea開發,進入terminal控制臺輸入如下命令,打包開發環境配置的jar包

mvn clean package -Pprod

在這里插入圖片描述
在這里插入圖片描述
看到打包成功了

五、啟動jar包

windows下使用cmd命令進入打包后的項目target目錄下執行

java  -jar execute-batch-0.0.1-SNAPSHOT.jar

在這里插入圖片描述
啟動成功了,我們的生產環境端口號正是7788
在這里插入圖片描述
postman調用下接口
在這里插入圖片描述
到這里maven多環境打包配置完成了

六、完整pom文件

筆者這里附上完整的pom文件內容,可供復制參考,主要是 < b u i l d > < / b u i l d > <build></build> <build></build> < p r o f i l e s > < / p r o f i l e s > <profiles></profiles> <profiles></profiles>中的配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.execute.batch</groupId><artifactId>execute-batch</artifactId><version>0.0.1-SNAPSHOT</version><name>execute-batch</name><description>execute-batch</description><properties><java.version>21</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter-test</artifactId><version>3.0.3</version><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency><dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>2.0.1.Final</version></dependency></dependencies><!-- 打包需要引入對應環境的配置文件 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!--打包時跳過測試--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>3.1.2</version><configuration><skipTests>true</skipTests></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><executions><execution><id>default-resources</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><outputDirectory>target/classes</outputDirectory><useDefaultDelimiters>false</useDefaultDelimiters><delimiters><delimiter>@</delimiter></delimiters><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/resources/</directory><filtering>true</filtering><includes><include>**/*.yaml</include></includes></resource><resource><directory>src/main/resources/</directory><excludes><exclude>**/*.yaml</exclude></excludes></resource></resources></configuration></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-antrun-plugin</artifactId><version>1.3</version><executions><execution><id>print-custom-info</id><phase>package</phase><configuration><tasks><!--suppress UnresolvedMavenProperty --><echo message="[INFO] ${environment} 環境打包執行成功"/></tasks></configuration><goals><goal>run</goal></goals></execution></executions></plugin></plugins></build><profiles><profile><!--不同環境Profile的唯一id--><id>dev</id><!--默認激活dev 環境--><activation><activeByDefault>true</activeByDefault></activation><properties><!--environment是自定義的字段(名字隨便起),自定義字段可以有多個,確保與配置文件一致--><environment>dev</environment></properties></profile><profile><id>prod</id><activation><activeByDefault>false</activeByDefault></activation><properties><environment>prod</environment></properties></profile><profile><id>test</id><activation><activeByDefault>false</activeByDefault></activation><properties><environment>test</environment></properties></profile></profiles></project>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15812.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15812.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15812.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

matlab 圖像的中值濾波

目錄 一、功能概述1、算法概述2、主要函數3、計算公式二、代碼實現三、結果展示四、參考鏈接本文由CSDN點云俠翻譯,放入付費專欄只為防不要臉的爬蟲。專欄值錢的不是本文,切勿因本文而訂閱。 一、功能概述 1、算法概述 中值濾波是圖像處理中一種常用的非線性運算,用于減少…

間接平差——以水準網平差為例 (python詳細過程版)

目錄 一、原理概述二、案例分析三、代碼實現四、結果展示本文由CSDN點云俠原創,間接平差——以水準網平差為例 (python詳細過程版),爬蟲自重。如果你不是在點云俠的博客中看到該文章,那么此處便是不要臉的爬蟲與GPT生成的文章。 一、原理概述 間接平差的函數模型和隨機模型…

openai api的初次嘗試

不懂已經不去百度了&#xff0c;現在直接問chatgpt就解決絕大多數問題了。 OpenAI API目前還沒有官方支持的npm庫&#xff0c;但是您可以使用現有的第三方npm庫進行OpenAI API的訪問和使用。這里提供一個npm庫 openai-node 的安裝和使用方法&#xff1a; 在命令行或終端中使用…

Util和utils

Util FieldStats 這段代碼定義了一個名為FieldStats的Java類&#xff0c;位于com.cqupt.software_1.Util包中。它使用了lombok庫的Data和AllArgsConstructor注解&#xff0c;這些注解幫助生成了getter、setter、toString等方法&#xff0c;以及包含所有參數的構造函數。類中有…

區塊鏈會議投稿資訊CCF A--USENIX Security 2025 截止9.4、1.22 附錄用率

會議名稱&#xff1a;34th USENIX Security Symposium CCF等級&#xff1a;CCF A類學術會議 類別&#xff1a;網絡與信息安全 錄用率&#xff1a;2023年接收率29%&#xff0c;2024錄用的區塊鏈相關文章請查看 Symposium Topics System security Operating systems security …

vue實現可拖拽移動懸浮球

封裝懸浮球組件&#xff0c;文件名s-icons.vue <template><div ref"icons" class"icons-container" :style"{ left: left px, top: top px }"><slot></slot></div> </template> <script> export …

國產化服務器開啟NTP功能并向NTP時鐘服務器同步

1.備份/etc/chrony.conf文件&#xff1b; cp -rp /etc/chrony.conf /etc/chrony.conf.bak.20240522 2.修改chrony.conf文件&#xff0c;增加NTP時鐘信息。&#xff08;客戶端填寫時鐘同步服務器的IP地址或者域名&#xff0c;我這里寫的IP地址。下面Allow NTP Client是只允許…

Mysql 的 binlog 有幾種格式?

MySQL 的二進制日志&#xff08;binlog&#xff09;有三種格式&#xff0c;每種格式都有其特定的用途和優缺點。以下是詳細描述&#xff1a; 1. STATEMENT 描述: 記錄的是 SQL 語句。特點: 每條更改數據的 SQL 語句都會記錄在 binlog 中。相對較小&#xff0c;因為只記錄了 S…

數字圖像處理岡塞雷斯第四版課后習題答案【英文原版】

第二章 第三章 . 第四章 傅里葉變換是一個線性過程&#xff0c;而計算梯度的平方根和平方根則是非線性運算。傅里葉變換可以用來計算微分的差值(如問題4.50)&#xff0c;但必須在空間域中直接計算平方和平方根值。 (a)實際上&#xff0c;由于高通操作&#xff0c;環有一個暗中心…

在已創建的git工程中添加.gitignore

有些代碼創建git時&#xff0c;為了方便將所有文件都加入了git管理&#xff0c;但實際有些庫的Makefile文件和編譯目錄的文件不需要加入管理&#xff0c;否則每次提交或編譯后&#xff0c;git diff將看到非常多的冗余信息。而我們修改的核心代碼都淹沒在這些大量無用的信息里面…

Golang:gammazero/deque是一個快速環形緩沖區deque(雙端隊列)實現

gammazero/deque是一個快速環形緩沖區deque&#xff08;雙端隊列&#xff09;實現。 文檔 https://github.com/gammazero/deque 安裝 go get github.com/gammazero/deque代碼示例 先入先出隊列 package mainimport ("fmt""github.com/gammazero/deque&quo…

留守兒童|基于SprinBoot+vue的留守兒童愛心網站(源碼+數據庫+文檔)

留守兒童愛心網站 目錄 基于SprinBootvue的留守兒童愛心網站 一、前言 二、系統設計 三、系統功能設計 1系統功能模塊 2管理員功能模塊 3用戶功能模塊 四、數據庫設計 五、核心代碼 六、論文參考 七、最新計算機畢設選題推薦 八、源碼獲取&#xff1a; 博主介紹&…

STM_HAL_TIM_IC_(輸入捕獲,捕獲PWM波)

介紹 TM32微控制器提供了輸入捕獲&#xff08;Input Capture&#xff09;功能&#xff0c;這是一種用于精確測量外部信號脈沖寬度和周期的強大技術。輸入捕獲通常與定時器&#xff08;如TIM&#xff09;的高級控制定時器&#xff08;TIM1和TIM8&#xff09;或通用定時器&#…

MySQL之Schema與數據類型優化和創建高性能的索引(一)

Schema與數據類型優化 只修改.frm文件 從前面的例子中可以看到修改表的.frm文件是很快的&#xff0c;但MySQL有時候會在沒有必要的時候也重建.如果愿意冒一些風險&#xff0c;可以讓MySQL做一些其他類型的修改而不用重建表。下面這些操作是有可能不需要重建表的: 1.移除(不是…

JavaEE-文件IO2

文章目錄 前言一、字節流1.1 讀文件1.2 寫文件 二、字符流2.1 讀文件2.2 寫文件 三、文件IO三道例題 前言 在這里對Java標準庫中對文件內容的操作進行總結&#xff0c;總體上分為兩部分&#xff0c;字節流和字符流&#xff0c;就是以字節為單位讀取文件和以字符為單位讀取文件…

[AI Google] 介紹 VideoFX,以及 ImageFX 和 MusicFX 的新功能

VideoFX 是來自 labs.google 的最新實驗&#xff0c;您可以查看音樂效果和圖像效果的新更新&#xff0c;現在在 110 多個國家可用。 生成式媒體正在改變人們構思創意并增強我們的創造力能力的方式。我們致力于與創作者和藝術家合作構建人工智能&#xff0c;以更好地理解這些生成…

cmake使用交叉編譯工具鏈并驗證

目錄 一、內容 二、配置 1. 準備cmake文件 2. 使用交叉編譯 三、驗證 1. 構建階段驗證 2. 編譯階段驗證 一、內容 目的&#xff1a;在X86環境下編譯ARM平臺軟件 編寫交叉編譯配置文件&#xff1a;xx.cmake 執行cmake命令時指定&#xff1a;cmake \ -DCMAKE_TOOLCHAIN_F…

Linux Crontab:看完這篇,還有啥不懂的嗎

在Linux系統管理中&#xff0c;自動化是一個至關重要的概念&#xff0c;它可以幫助我們節省時間、減少錯誤并提高效率。crontab> 是實現這一目標的強大工具&#xff0c;它允許我們安排任務在特定的時間自動執行。本文將詳細介紹 crontab 的基礎概念、語法、命令、高級技巧以…

K8S認證|CKA題庫+答案| 12. 查看Pod日志

目錄 12、查看Pod日志 CKA v1.29.0模擬系統免費下載試用&#xff1a; 題目&#xff1a; 開始操作&#xff1a; 1&#xff09;、切換集群 2&#xff09;、提取錯誤日志 3&#xff09;、驗證提取結果 12、查看Pod日志 CKA v1.29.0模擬系統免費下載試用&#xff1a; 百度…

簡單的UDP網絡程序:多人群聊系統

本章重點 能夠實現一個簡單的udp客戶端/服務器; 1.創建套接字 我們把服務器封裝成一個類&#xff0c;當我們定義出一個服務器對象后需要馬上初始化服務器&#xff0c;而初始化服務器需要做的第一件事就是創建套接字。 ?參數說明&#xff1a; domain&#xff1a;創建套接字的域…