SpringBoot工程Docker多環(huán)境中使用同一個Jar包解決方案
一、背景
SpringBoot工程Docker多環(huán)境中使用同一個Jar包解決方案
二、原因
- bootstrap.yml配置如下,通過勾選profiles選定環(huán)境
spring: profiles: profiles: @activeEnv@ # 固定的,和profiles里面的標(biāo)簽一致
--- # 本地開發(fā)環(huán)境,每個環(huán)境復(fù)制一份 spring: application: name: svr-job-mgt # 服務(wù)名,改成自己的 #其他配置信息 config: activate: on-profile: dev # 環(huán)境標(biāo)識,照抄
- pom.xml配置如下,可以發(fā)現(xiàn)打包后會把resources下所有資源打進(jìn)jar包
<resources> <resource> <!-- 指定配置文件的位置 --> <directory>src/main/resources</directory> <includes> <include>**/*</include> </includes> <!-- 開啟替換標(biāo)簽,比如我們的'@env'就是通過這個替換的 --> <filtering>true</filtering> </resource> </resources>
<!--環(huán)境--> <profiles> <profile> <id>dev</id> <properties> <activeEnv>dev</activeEnv> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>prod</id> <properties> <activeEnv>prod</activeEnv> </properties> </profile> </profiles>
- 我們使用的打包命令為:
mvn package -Dmaven.test.skip=true -Pdev
-D表示跳過單元測試的運(yùn)行,-P指定打包環(huán)境
這就會導(dǎo)致一個問題,當(dāng)我們從dev環(huán)境增加prod環(huán)境時,我們就得需要從新build我們的jar包,但是我們發(fā)現(xiàn)所有的jar包下配置文件是一樣,唯一不一樣的參數(shù)為
spring.profiles.profiles變成了我們當(dāng)前的環(huán)境參數(shù)。
二、思考
- spring.profiles.profiles參數(shù)如何匹配到各種環(huán)境
- 項(xiàng)目docker容器化部署,我們能不能通過環(huán)境變量傳參數(shù)
- resource下的配置文件如何獲取到我們的docker環(huán)境變量
三、解決
- 更改spring.profiles.profiles的值。key-value可自定義
spring: profiles: profiles: ${ACTIVE_ENV}
- k8s或者docker增加環(huán)境變量
env: - name: ACTIVE_ENV value: prod
后續(xù),通過測試發(fā)現(xiàn),無需1和2操作,直接增加環(huán)境變量即可
env: - name: spring.profiles.active value: prod
- 打包時候無需指定環(huán)境:
mvn package -Dmaven.test.skip=true
四、其他可優(yōu)化的部分
- 由于現(xiàn)在賬號密碼都放在配置文件下,導(dǎo)致賬號密碼都在代碼中(不安全),后續(xù)可參考如上設(shè)置配置到啟動環(huán)境中。
- 現(xiàn)在還面臨的一個問題是當(dāng)前環(huán)境配置文件被修改,還需要從新打包。
解決問題2:我們可以利用springboot讀取配置文件的優(yōu)先級:jar包所在目錄 > resource。其他路徑可自行查閱。暫時想到兩種解決方案,采用方案一。
方案一:將宿主機(jī)上的任意位置文件或者目錄掛載到容器中
方案二:也可以利用docker cp命令把本地文件傳入到運(yùn)行的容器中,然后docker commit生成新的鏡像
方案一示例:將本地目錄/data下配置文件掛載到我們的容器中/app目錄下,app目錄為app.jar所在目錄
docker run ... -v /data/application-pore.yml:/app/application-prod.yml ...
到此這篇關(guān)于SpringBoot工程Docker多環(huán)境中使用同一個Jar包解決方案的文章就介紹到這了,更多相關(guān)SpringBoot Docker使用Jar包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java中獲取當(dāng)前服務(wù)器的Ip地址的方法
本篇文章主要介紹了java中獲取當(dāng)前服務(wù)器的Ip地址的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02詳解在Spring MVC中使用注解的方式校驗(yàn)RequestParams
本篇文章主要介紹了詳解在Spring MVC中使用注解的方式校驗(yàn)RequestParams ,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03SpringBoot基于沙箱環(huán)境實(shí)現(xiàn)支付寶支付教程
本文介紹了如何使用支付寶沙箱環(huán)境進(jìn)行開發(fā)測試,包括沙箱環(huán)境的介紹、準(zhǔn)備步驟、在Spring Boot項(xiàng)目中結(jié)合支付寶沙箱進(jìn)行支付接口的實(shí)現(xiàn)與測試2025-03-03Java基于Lock的生產(chǎn)者消費(fèi)者模型示例
這篇文章主要介紹了Java基于Lock的生產(chǎn)者消費(fèi)者模型,結(jié)合實(shí)例形式分析了java基于鎖機(jī)制的生產(chǎn)者消費(fèi)者模型相關(guān)實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2018-08-08使用Spring?Boot?2.x構(gòu)建Web服務(wù)的詳細(xì)代碼
這篇文章主要介紹了使用Spring?Boot?2.x構(gòu)建Web服務(wù)的詳細(xì)代碼,主要基于JWT的身份認(rèn)證,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03