springboot-profiles 多環(huán)境配置整合避坑(保姆級(jí)入門)

第一步:從簡(jiǎn)單的說起

件開發(fā)中經(jīng)常有開發(fā)環(huán)境统刮、測(cè)試環(huán)境窗轩、預(yù)發(fā)布環(huán)境、生產(chǎn)環(huán)境争群,而且一般這些環(huán)境配置會(huì)各不相同峰弹,比如數(shù)據(jù)庫(kù)店量、應(yīng)用端口號(hào)等配置就不一樣,每次打包發(fā)布手動(dòng)改配置麻煩且容易出錯(cuò)鞠呈,如果能在不修改配置的基礎(chǔ)上簡(jiǎn)單操作就能實(shí)現(xiàn)切換是不是很美融师,那么我就一個(gè)application.yml配置文件,這么多份環(huán)境配置難道都寫在這里粟按,那我們?cè)囋嚳?/p>

image.png

原來application.yml文件可以用 --- 來劃分區(qū)塊诬滩,一個(gè)區(qū)塊代表一個(gè)環(huán)境霹粥,這樣就把多環(huán)境配置內(nèi)容集中寫入到一個(gè)主配置文件中了灭将,主配置文件application.yml就是系統(tǒng)啟動(dòng)默認(rèn)會(huì)使用的配置文件疼鸟,那我們啟動(dòng)一下看看效果(注意:第一區(qū)塊是主配置內(nèi)容必須要有的,啟用其它區(qū)塊會(huì)將相同配置內(nèi)容進(jìn)行覆蓋替換)


image.png

好的庙曙,當(dāng)前使用的默認(rèn)配置端口是8080空镜,那么如何切換成8888呢,配置如下激活dev捌朴,再次運(yùn)行


image.png

查看運(yùn)行后端口為8888吴攒,這樣我們就完成了簡(jiǎn)單的多環(huán)境切換,你也可以切換成9999砂蔽,只需要將dev改成prod
image.png

目前我們多環(huán)境只對(duì)端口進(jìn)行了區(qū)別洼怔,如果每個(gè)區(qū)塊配置不同的數(shù)據(jù)庫(kù)配置,比如第一區(qū)塊配置成本地?cái)?shù)據(jù)庫(kù)那么他就會(huì)連本地?cái)?shù)據(jù)庫(kù)左驾,那么prod當(dāng)然就是配置生產(chǎn)的數(shù)據(jù)庫(kù)了镣隶。如果本地、測(cè)試诡右、生產(chǎn)所有配置都一樣唯獨(dú)數(shù)據(jù)庫(kù)不一樣安岂,那么每個(gè)區(qū)塊會(huì)有很多重復(fù)的配置,而且application.yml文件被塞得滿滿當(dāng)當(dāng)帆吻,查看蠻頭疼的域那,但是在這個(gè)前提上我如果本地開發(fā)時(shí)想連接prod的數(shù)據(jù)庫(kù),那么直接active:prod啟用就可以了猜煮。

至此次员,看起來用idea開發(fā)時(shí)切換是沒問題的,那么打包時(shí)是什么情況呢王带,那就認(rèn)為idea運(yùn)行的是哪個(gè)環(huán)境翠肘,打包時(shí)默認(rèn)用的就是哪個(gè)環(huán)境,當(dāng)前idea項(xiàng)目啟動(dòng)運(yùn)行端口為8888辫秧,這里可以先停掉idea當(dāng)前這個(gè)服務(wù)束倍,因?yàn)榇虬髥?dòng)jar包會(huì)導(dǎo)致沖突,然后我們maven打包盟戏,先clean是將你當(dāng)前的jar包刪除清理绪妹,package為打包


image.png

找到j(luò)項(xiàng)目ar包


image.png

image.png

image.png

cmd回車進(jìn)入控制臺(tái),執(zhí)行命令 運(yùn)行jar包

java -jar 你的jar包
image.png

啟動(dòng)后查看端口為8888 柿究,說明我們之前的猜想沒問題邮旷,就是本地idea當(dāng)前運(yùn)行的是哪個(gè)環(huán)境,打包后就是哪個(gè)環(huán)境


image.png

我想在這個(gè)時(shí)候切換環(huán)境怎么辦蝇摸,簡(jiǎn)單婶肩!我們ctrl+c退出停掉當(dāng)前啟動(dòng)的項(xiàng)目办陷,重新啟動(dòng)執(zhí)行以下命令

java -jar 你的jar包 --spring.profiles.active=prod
image.png

啟動(dòng)端口為9999沒錯(cuò),當(dāng)然你部署到Linux也是一樣的

第二步:來點(diǎn)有難度的玩兒法

新建幾個(gè)環(huán)境配置文件律歼,我想大家對(duì)這個(gè)都不陌生民镜,項(xiàng)目會(huì)根據(jù)約定規(guī)則后綴dev、prod险毁、test找到相應(yīng)文件


image.png

application-dev.yml端口改成8082,其它原有配置不變制圈,然后啟動(dòng)


image.png

image.png

發(fā)現(xiàn)項(xiàng)目啟動(dòng)端口為8082


image.png

說明用多個(gè)文件配置優(yōu)先級(jí)要高于集中在application.yml這種方式,而且這種方式優(yōu)于集中配置便于區(qū)分管理環(huán)境畔况,其它都和上述測(cè)試情況一致這里就不做對(duì)比測(cè)試了(原則就是被激活application-dev.yml的環(huán)境配置與application.yml主配置中相同內(nèi)容會(huì)被前者覆蓋替換)鲸鹦,一般這種方式用的比較多,application.yml中的區(qū)塊就可以刪除掉了跷跪。

另外idea中還可以這樣激活當(dāng)前選用環(huán)境


image.png
第三步:來點(diǎn)高年級(jí)的吧

大家可能經(jīng)巢鍪龋看到有些項(xiàng)目他是這樣指定當(dāng)前激活的環(huán)境,如下


image.png

這是使用maven實(shí)現(xiàn)多環(huán)境運(yùn)行和打包吵瞻,首先需要對(duì)pom進(jìn)行以下配置

 <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>application.yml</include>
                    <include>application-${package.environment}.yml</include>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
 </build>



 <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <package.environment>dev</package.environment>
            </properties>
            <!-- 是否默認(rèn) true表示默認(rèn)-->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <package.environment>test</package.environment>
            </properties>
        </profile>
        <profile>
            <!-- 生產(chǎn)環(huán)境 -->
            <id>prod</id>
            <properties>
                <package.environment>prod</package.environment>
            </properties>
        </profile>
    </profiles>
image.png

好的同步pom之后葛菇,maven會(huì)出現(xiàn)一個(gè)profiles的選項(xiàng),因?yàn)闆]有配置profiles之前是沒有的听皿,而且發(fā)現(xiàn)它默認(rèn)勾選了dev但是灰色的熟呛,我們先啟動(dòng)看看能不能起到激活dev作用


image.png

啟動(dòng)成功,dev應(yīng)該是8082尉姨,說明已激活庵朝,這里灰色選中可以理解為默認(rèn)激活


image.png

點(diǎn)擊勾選變成深色,啟動(dòng)依然8082(注意每次點(diǎn)擊切換都要reimport刷新下maven)
image.png
image.png

繼續(xù)點(diǎn)擊不勾選又厉,啟動(dòng)報(bào)錯(cuò)


image.png
image.png

不勾選會(huì)導(dǎo)致@package.environment@引用失效九府,項(xiàng)目無法啟動(dòng)


image.png

同樣也會(huì)導(dǎo)致這里爆紅


image.png

此處就有坑了,按理說我們只能選一個(gè)環(huán)境才對(duì)啊覆致,結(jié)果這里可以雙擊選中多個(gè)


image.png

結(jié)果啟動(dòng)的是prod侄旬,但是ctrl點(diǎn)擊@package.environment@切換到了這個(gè)位置


image.png

也就是這塊有bug按理說是互斥的,但是多點(diǎn)幾次是混亂的完全無規(guī)律可言煌妈,所以盡量選中其中一個(gè)儡羔,不要多選,這樣就正常了
image.png

此時(shí)啟動(dòng)后也是test的端口璧诵,ctrl點(diǎn)擊@package.environment@切換到了test的位置汰蜘,然后勾選prod同上步驟測(cè)試也沒問題


image.png

再來看看maven打包


image.png

同樣找到j(luò)ar包c(diǎn)md運(yùn)行jar包啟動(dòng),發(fā)現(xiàn)激活了dev之宿,沒問題族操,那么java -jar 你的jar包 --spring.profiles.active=test這種方式就很有意思了,首先它會(huì)去找test這個(gè)配置文件比被,發(fā)現(xiàn)找不到色难,因?yàn)閴焊鶝]打包進(jìn)來泼舱,所以只有勾選了才會(huì)打包,是不是這樣我們?nèi)抗催x打包試試看枷莉。


image.png
image.png

打包后直接啟動(dòng)娇昙,激活的是prod,然后我們指定激活test依沮,發(fā)現(xiàn)沒什么卵用涯贞,啟動(dòng)端口成了8080就是按照沒有任何配置的情況來處理枪狂,也就是把prod的配置都搞得不能用了


image.png

所以危喉,我們還是需要哪個(gè)指定哪個(gè)打包的比較好

也可以指定環(huán)境打包

mvn clean package -P dev
mvn clean package -P test
mvn clean package -P prod
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市州疾,隨后出現(xiàn)的幾起案子辜限,更是在濱河造成了極大的恐慌,老刑警劉巖严蓖,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件薄嫡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡颗胡,警方通過查閱死者的電腦和手機(jī)毫深,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毒姨,“玉大人哑蔫,你說我怎么就攤上這事』∧牛” “怎么了闸迷?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)俘枫。 經(jīng)常有香客問我腥沽,道長(zhǎng),這世上最難降的妖魔是什么鸠蚪? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任今阳,我火速辦了婚禮,結(jié)果婚禮上茅信,老公的妹妹穿的比我還像新娘盾舌。我一直安慰自己,他們只是感情好汹押,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布矿筝。 她就那樣靜靜地躺著,像睡著了一般棚贾。 火紅的嫁衣襯著肌膚如雪窖维。 梳的紋絲不亂的頭發(fā)上榆综,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音铸史,去河邊找鬼鼻疮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛琳轿,可吹牛的內(nèi)容都是我干的判沟。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼崭篡,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼挪哄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起琉闪,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤迹炼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后颠毙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斯入,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年蛀蜜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了刻两。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡滴某,死狀恐怖磅摹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情壮池,我是刑警寧澤偏瓤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站椰憋,受9級(jí)特大地震影響厅克,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜橙依,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一证舟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧窗骑,春花似錦女责、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春刷喜,著一層夾襖步出監(jiān)牢的瞬間残制,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工掖疮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浊闪。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像折汞,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子猛铅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容