基于Maven profile的配置管理

應(yīng)用場(chǎng)景

在java項(xiàng)目的開(kāi)發(fā)過(guò)程中,配置文件中相關(guān)配置項(xiàng)的值是應(yīng)不同的執(zhí)行環(huán)境所變化的,并且這種變化也可能是事前未知的吮便。

縱向變化-執(zhí)行者

一種是隨著執(zhí)行者的不同而不同愉耙,譬如說(shuō)開(kāi)發(fā)人員開(kāi)發(fā)過(guò)程中debug的環(huán)境(簡(jiǎn)稱dev)、個(gè)人CI與單元測(cè)試環(huán)境(ut)、團(tuán)隊(duì)CI環(huán)境、測(cè)試環(huán)境可能使用不同類型的數(shù)據(jù)庫(kù)和執(zhí)行環(huán)境。

橫向變化-時(shí)間

另外一種是隨著時(shí)間的變化而變化的赃额。例如在筆者所服務(wù)的公司加派,通過(guò)使用模板機(jī)VM的方式提供帶系統(tǒng)、數(shù)據(jù)庫(kù)和基礎(chǔ)數(shù)據(jù)的開(kāi)發(fā)測(cè)試環(huán)境給大家使用跳芳,但是隨著版本不斷上線芍锦,模板機(jī)VM會(huì)不斷被更新。在模板機(jī)被更新后飞盆,需要重新clone環(huán)境并使用娄琉,這時(shí)如IP等信息基本都會(huì)有變化,因此即使是如團(tuán)隊(duì)CI環(huán)境吓歇,可能也會(huì)需要變化孽水。

解決方案1- profile

通過(guò)maven profile來(lái)針對(duì)橫向變化的部分來(lái)形成一個(gè)個(gè)profile,在運(yùn)行時(shí)動(dòng)態(tài)選擇即可。

解決方案2 - filter

在maven profile的基礎(chǔ)上城看,針對(duì)臨時(shí)變化的部分女气,可以通過(guò)filter在runtime動(dòng)態(tài)指定環(huán)境的參數(shù)值。

利用spring框架自身提供的profile機(jī)制

最終的解決方案

針對(duì)公司現(xiàn)有java類產(chǎn)品的開(kāi)發(fā)框架(springMvc)测柠,使用了如下的方式
1炼鞠、將src/main/resouces下的配置文件復(fù)制到src/test/resouces下,對(duì)需要參數(shù)化的配置項(xiàng)的值進(jìn)行參數(shù)化修改轰胁。
key=123 修改為key=${key}
2谒主、在pom.xml中建立dev/ut/ci/qa等profile

<profiles>
<profile>
    <id>dev</id>
    <!-- 默認(rèn)激活開(kāi)發(fā)配制,使用app_dev.properties來(lái)替換設(shè)置過(guò)慮的資源文件中的${key} -->
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <build>
        <filters>
            <filter>src/test/resources/app_dev.properties</filter>
        </filters>
    </build>
</profile>
<profile>
    <id>ut</id>
    <activation>
        <activeByDefault>false</activeByDefault>
    </activation>
    <build>
        <filters>
            <filter>src/test/resources/app_ut.properties</filter>
        </filters>
    </build>
</profile>
</profiles>

3赃阀、在pom.xml的<build/>部分加入filter霎肯,指定需要被替換的參數(shù)文件

   <build>
            <testResources>
                <!-- filter global.properties frameworkConfig.properties -->
            <testResource>
                <directory>src/test/resources</directory>
                <includes>
                    <include>frameworkConfig.properties</include>
                    <include>cfc_config.properties</include>
                    </includes>
                <filtering>true</filtering>
            </testResource>
           <!-- inlcude other files like root-context.xml-->
             <testResource>
                <directory>src/test/resources</directory>
                <excludes>
                    <exclude>frameworkConfig.properties</exclude>
                    <exclude>cfc_config.properties</exclude>
                    <exclude>app_*.properties</exclude>
                    </excludes>
                <filtering>true</filtering>
            </testResource>
        </testResources>
   </build>

這里有個(gè)坑要注意,一般在網(wǎng)上搜來(lái)的都是profile/filter介紹都是關(guān)于<resource/>標(biāo)簽的榛斯,其實(shí)對(duì)應(yīng)的是src/main/resouces目錄姿现。如果要操作src/test/resources目錄,則需要使用<testResources/>標(biāo)簽肖抱。
4、在src/test/resouces下建立類似app_dev/app_qa等配置文件异旧,文件中填寫相應(yīng)的配置項(xiàng)的值意述。
如:key=123
5、在pom.xml的<build/> 的filter中增加exclude部分來(lái)剔除4中的配置文件吮蛹,以免污染構(gòu)建后的二進(jìn)制文件夾荤崇。

        <exclude>app_*.properties</exclude>

6、如果有臨時(shí)變化潮针,不需要通過(guò)commit到代碼庫(kù)中术荤,則可以在運(yùn)行時(shí),通過(guò)類似

mvn test -Pdev -Dkey=666

的方式來(lái)動(dòng)態(tài)修改key的值每篷。

為什么不用配置中心

筆者所在的公司也建設(shè)了配置中心瓣戚,所有系統(tǒng)在啟動(dòng)時(shí)都需要通過(guò)配置中心來(lái)獲取對(duì)應(yīng)配置項(xiàng)中的值端圈。在其設(shè)計(jì)過(guò)程中,除了prod環(huán)境外子库,也規(guī)劃了dev/qa等環(huán)境舱权。 由于配置中心是一個(gè)web服務(wù),對(duì)于多個(gè)開(kāi)發(fā)/測(cè)試人員仑嗅,如果在同時(shí)針對(duì)某個(gè)系統(tǒng)進(jìn)行開(kāi)發(fā)/測(cè)試宴倍,但使用不同的環(huán)境,其在配置中心的配置項(xiàng)的值也不同仓技,如果使用同一個(gè)配置中心鸵贬,則會(huì)造成配置項(xiàng)的值沖突。
現(xiàn)實(shí)中脖捻,也是通過(guò)模板機(jī)來(lái)部署多套配置中心來(lái)規(guī)避上述問(wèn)題阔逼。但是在開(kāi)發(fā)/單元測(cè)試/集成測(cè)試的過(guò)程中,我們希望配置值能跟隨代碼庫(kù)進(jìn)行配置管理郭变。

With the above configuration, both main/resources and test/resources folders are treated as resources while the second one should be treated as test resources. Because of that, the resources:resources goal handles not only the config.xml but also test-config.xml and both lands in target/classes properly filtered.
Because of default definition, the other goal resources:testResources copies test-config.xml to target/test-classes without applying the filters (as by default filtering is disabled).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末颜价,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子诉濒,更是在濱河造成了極大的恐慌周伦,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件未荒,死亡現(xiàn)場(chǎng)離奇詭異专挪,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)片排,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門寨腔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人率寡,你說(shuō)我怎么就攤上這事迫卢。” “怎么了冶共?”我有些...
    開(kāi)封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵乾蛤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我捅僵,道長(zhǎng)家卖,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任庙楚,我火速辦了婚禮上荡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘馒闷。我一直安慰自己酪捡,他們只是感情好叁征,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著沛善,像睡著了一般航揉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上金刁,一...
    開(kāi)封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天帅涂,我揣著相機(jī)與錄音,去河邊找鬼尤蛮。 笑死媳友,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的产捞。 我是一名探鬼主播醇锚,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼坯临!你這毒婦竟也來(lái)了焊唬?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤看靠,失蹤者是張志新(化名)和其女友劉穎赶促,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體挟炬,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸥滨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谤祖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片婿滓。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖粥喜,靈堂內(nèi)的尸體忽然破棺而出凸主,到底是詐尸還是另有隱情,我是刑警寧澤额湘,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布秕铛,位于F島的核電站,受9級(jí)特大地震影響缩挑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鬓梅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一供置、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绽快,春花似錦芥丧、人聲如沸紧阔。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)擅耽。三九已至,卻和暖如春物遇,著一層夾襖步出監(jiān)牢的瞬間乖仇,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工询兴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乃沙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓诗舰,卻偏偏與公主長(zhǎng)得像警儒,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子眶根,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理蜀铲,服務(wù)發(fā)現(xiàn),斷路器属百,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 用兩張圖告訴你记劝,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,727評(píng)論 2 59
  • 最近一段時(shí)間,無(wú)論是各大新聞網(wǎng)站别伏,還是微博蹄衷,都被《惡棍天使》是爛片霸屏了,各種謾罵聲此起彼伏厘肮,各種犀利影評(píng)愧口。 反復(fù)...
    陌上香閱讀 992評(píng)論 0 2
  • 啦啦啦啦啦啦啦空軍建軍節(jié) 啊啊啊不吃了KKK啦咯具體咯啦咯啦
    trueche閱讀 278評(píng)論 0 0
  • 《一字禪筆記》 坎:是坑,是水类茂。如果你把它放在路上耍属,它會(huì)擋住你的腳步;如果你把它變成你...
    燕趙北羽閱讀 910評(píng)論 0 3