使用環(huán)境變量控轿,讓Spring Boot應(yīng)用部署更加靈活

Spring Boot可以說(shuō)是目前最火的開(kāi)發(fā)框架了缠诅,幾乎所有新的企業(yè)應(yīng)用都會(huì)優(yōu)先考慮使用Spring Boot哑蔫,甚至一些之前老的應(yīng)用系統(tǒng)也會(huì)改造為Spring Boot構(gòu)建钉寝。其約定優(yōu)于配置的特性使開(kāi)發(fā)工作變得簡(jiǎn)單,大大節(jié)省了開(kāi)發(fā)工作量和成本闸迷。Java也是因?yàn)閾碛泻蚐pring Boot一樣優(yōu)秀的眾多開(kāi)源框架嵌纲,才能一直在編程語(yǔ)言排行榜前幾名。

一個(gè)應(yīng)用程序腥沽,不可避免的要使用各種配置文件逮走,比如配置應(yīng)用名稱,應(yīng)用版本今阳,應(yīng)用服務(wù)端口等师溅。Spring Boot本身提供了多種配置方式,你可以把配置寫在application.yml中盾舌,通常我們會(huì)使用spring.profiles.active來(lái)進(jìn)行配置分離墓臭,實(shí)現(xiàn)應(yīng)用在不同環(huán)境下使用不同的配置參數(shù)。但是這樣有一個(gè)問(wèn)題妖谴,就是這些配置必須都提前配置好窿锉,比如dev環(huán)境使用什么參數(shù)、prod環(huán)境使用什么參數(shù)窖维,這些配置都被打包進(jìn)了我們的應(yīng)用榆综。而當(dāng)我們需要改變某個(gè)配置是則需要重新打包發(fā)布,這是非常麻煩的铸史,尤其是當(dāng)我們使用云平臺(tái)鼻疮、自動(dòng)化部署、容器等服務(wù)時(shí)琳轿,重新打包會(huì)造成不必要的浪費(fèi)判沟,畢竟我們只是修改了一個(gè)配置而已耿芹,并且大多數(shù)企業(yè)對(duì)于這種重新打包發(fā)布很敏感,你很難在生產(chǎn)環(huán)境實(shí)現(xiàn)重新部署(各種審核流程)挪哄。

Spring Boot可以讀取環(huán)境變量(宿主機(jī)吧秕,運(yùn)行容器等),在云平臺(tái)越來(lái)越流行的今天迹炼,我們的服務(wù)通常不是運(yùn)行在一個(gè)真實(shí)的物理機(jī)上面的砸彬。使用這些容器平臺(tái)很容配置我們想要的環(huán)境變量,把我們的配置暴露給環(huán)境變量斯入,可以方便我們的應(yīng)用部署和參數(shù)調(diào)整砂碉。

比如,我需要配置應(yīng)用連接數(shù)據(jù)庫(kù)的配置刻两,通常我們?cè)?code>application.yml或者使用指定環(huán)境的application-prod.yml配置文件增蹭,寫入以下配置:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1/demo?serverTimezone=Asia/Shanghai
    username: demo
    password: demo
    hikari:
      maximum-pool-size: 30
      max-lifetime: 60000
      minimum-idle: 5

像上面那樣,如果這時(shí)如果我們的數(shù)據(jù)庫(kù)的用戶密碼變了或者我們想調(diào)整一個(gè)連接池的相關(guān)配置磅摹,一般來(lái)講我們需要修改以上配置文件滋迈,然后重新打包發(fā)布(或者你說(shuō)可以在壓縮包內(nèi)修改配置文件?户誓?)饼灿,這種方式真是太糟糕了。

現(xiàn)在看看如果我們使用環(huán)境變量的方式來(lái)配置我們的參數(shù)厅克,如下:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: ${DEMO_APP_JDBC_URL:jdbc:mysql://127.0.0.1/demo?serverTimezone=Asia/Shanghai}
    username: ${DEMO_APP_JDBC_USERNAME:demo}
    password: ${DEMO_APP_JDBC_PASSWORD:demo}
    hikari:
      maximum-pool-size: ${DEMO_APP_JDBC_POOL_MAX_SIZE:30}
      max-lifetime: ${DEMO_APP_JDBC_POOL_MAX_LIFE_TIME:60000}
      minimum-idle: ${DEMO_APP_JDBC_POOL_MIN_SIZE:5}

以上使用${ENV:defauleValue}的形式配置了我們應(yīng)用的相關(guān)參數(shù)赔退,如果我們的運(yùn)行環(huán)境配置了上面用到的環(huán)境變量,則使用環(huán)境變量中的配置证舟,如果沒(méi)有配置則使用默認(rèn)的硕旗,比如我配置了環(huán)境變量DEMO_APP_JDBC_POOL_MAX_SIZE = 100,則應(yīng)用程序中的連接池最大連接數(shù)就變成100了女责。使用這種方式我們甚至沒(méi)必要使用spring.profiles.active來(lái)指定不同的配置文件了漆枚,簡(jiǎn)直一舉兩得。

注意:以上方式通常適用于云抵知、容器等應(yīng)用環(huán)境的部署墙基,因?yàn)檫\(yùn)行環(huán)境是被我們的應(yīng)用獨(dú)享的。我想你不愿意在一個(gè)運(yùn)行著多個(gè)應(yīng)用服務(wù)的環(huán)境上面配置這么多個(gè)性化的環(huán)境變量刷喜。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末残制,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子掖疮,更是在濱河造成了極大的恐慌初茶,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,126評(píng)論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浊闪,死亡現(xiàn)場(chǎng)離奇詭異恼布,居然都是意外死亡螺戳,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門折汞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)倔幼,“玉大人,你說(shuō)我怎么就攤上這事爽待∷鹜” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 169,941評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵鸟款,是天一觀的道長(zhǎng)揖庄。 經(jīng)常有香客問(wèn)我,道長(zhǎng)欠雌,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 60,294評(píng)論 1 300
  • 正文 為了忘掉前任疙筹,我火速辦了婚禮富俄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘而咆。我一直安慰自己霍比,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布暴备。 她就那樣靜靜地躺著悠瞬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪涯捻。 梳的紋絲不亂的頭發(fā)上浅妆,一...
    開(kāi)封第一講書人閱讀 52,874評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音障癌,去河邊找鬼凌外。 笑死,一個(gè)胖子當(dāng)著我的面吹牛涛浙,可吹牛的內(nèi)容都是我干的康辑。 我是一名探鬼主播,決...
    沈念sama閱讀 41,285評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼轿亮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼疮薇!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起我注,我...
    開(kāi)封第一講書人閱讀 40,249評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤按咒,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后仓手,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胖齐,經(jīng)...
    沈念sama閱讀 46,760評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡玻淑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了呀伙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片补履。...
    茶點(diǎn)故事閱讀 40,973評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖剿另,靈堂內(nèi)的尸體忽然破棺而出箫锤,到底是詐尸還是另有隱情,我是刑警寧澤雨女,帶...
    沈念sama閱讀 36,631評(píng)論 5 351
  • 正文 年R本政府宣布谚攒,位于F島的核電站,受9級(jí)特大地震影響氛堕,放射性物質(zhì)發(fā)生泄漏馏臭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評(píng)論 3 336
  • 文/蒙蒙 一讼稚、第九天 我趴在偏房一處隱蔽的房頂上張望括儒。 院中可真熱鬧,春花似錦锐想、人聲如沸帮寻。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,797評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)固逗。三九已至,卻和暖如春藕帜,著一層夾襖步出監(jiān)牢的瞬間烫罩,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,926評(píng)論 1 275
  • 我被黑心中介騙來(lái)泰國(guó)打工洽故, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嗡髓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,431評(píng)論 3 379
  • 正文 我出身青樓收津,卻偏偏與公主長(zhǎng)得像饿这,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子撞秋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評(píng)論 2 361

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