摘要:在實(shí)際用中,我們的服務(wù)通常要部署在不同的環(huán)境中,并且每個(gè)環(huán)境有只適用于本環(huán)境的配置文件。在讀取配置文件的時(shí)候,通過(guò)系統(tǒng)變量進(jìn)行選擇某一個(gè)配置文件或者在部署腳本中將不同機(jī)房的配置文件按照部署的環(huán)境不同進(jìn)行上傳。
在實(shí)際用中,我們的Java服務(wù)通常要部署在不同的環(huán)境中,并且每個(gè)環(huán)境有只適用于本環(huán)境的配置文件。
例如測(cè)試環(huán)境需要連接測(cè)試數(shù)據(jù)庫(kù),生產(chǎn)環(huán)境又會(huì)在不同的機(jī)房進(jìn)行服務(wù)部署,需要連接本機(jī)房的數(shù)據(jù)庫(kù)從庫(kù)。
同時(shí),每個(gè)環(huán)境的配置又有很多相同的部分,比如cache的超時(shí)時(shí)間等。本文介紹如何使用maven進(jìn)行多個(gè)部署環(huán)境的配置文件管理。
對(duì)于多個(gè)運(yùn)行環(huán)境的配置文件管理,比較原始的方法是為每一個(gè)部署環(huán)境創(chuàng)建一個(gè)配置文件:
resources ├── prod_beijing_config.properties ├── prod_shanghai_config.properties ├── dev_config.properties └── config.properties
在上面的例子中我們配置了兩個(gè)正式環(huán)境的配置文件,分別是北京機(jī)房和上海機(jī)房;配置了一個(gè)開(kāi)發(fā)環(huán)境的配置文件,還有一個(gè)本地運(yùn)行使用的配置文件。
在讀取配置文件的時(shí)候,通過(guò)系統(tǒng)變量進(jìn)行選擇某一個(gè)配置文件或者在部署腳本中將不同機(jī)房的配置文件按照部署的環(huán)境不同進(jìn)行上傳。
這樣做的問(wèn)題有:
實(shí)現(xiàn)復(fù)雜,需要在Java程序或者在部署腳本中進(jìn)行處理
各個(gè)部署環(huán)境公用的配置要維護(hù)多份。例如需要新增一個(gè)和部署環(huán)境無(wú)關(guān)的配置項(xiàng),需要在所有的配置文件中依次添加,稍有不慎就會(huì)造成部署失敗。
下面介紹一種使用maven進(jìn)行配置文件管理的方法,可以做到:
加載配置文件的過(guò)程對(duì)應(yīng)用程序透明,不管在哪個(gè)環(huán)境中都只需要加載 config.properties
公共配置項(xiàng)在一個(gè)文件中維護(hù)
首先修改項(xiàng)目的config.properties,將需要根據(jù)運(yùn)行環(huán)境不同取不同值的配置項(xiàng)目用變量代替,例如:
mysql.host = ${mysql.host} mysql.port = ${mysql.port} cache.size = 1000
然后在項(xiàng)目的根目錄上創(chuàng)建一個(gè) profiles 目錄,存放所有運(yùn)行環(huán)境的配置文件。
. ├── README.md ├── pom.xml ├── profiles │ ├── beijing_config.properties │ ├── shanghai_config.properties │ └── dev_config.properties ├── src │ ├── main │ │ ├── java │ │ │ └── com
注意這里每個(gè)機(jī)房的配置文件中只包含需要根據(jù)運(yùn)行環(huán)境不同取不同值的配置項(xiàng):
$ cat profiles/beijing_config.properties mysql.host = beijing.mysql.domain mysql.port = 4534 $ cat profiles/shanghai_config.properties mysql.host = shanghai.mysql.domain mysql.port = 4534 $ cat profiles/dev_config.properties mysql.host = test.mysql.host mysql.port = 4534
最關(guān)鍵的部分是pom.xml的配置:
4.0.0 demo demo war 1.0-SNAPSHOT .... UTF-8 UTF-8 dev true dev beijing beijing shanghai shanghai ... profiles/${build.profile.id}_config.properties ... src/main/resources/ true
在這個(gè)pom文件中,我們首先定義了三個(gè)profile,dev profile 中將 build.profile.id 的值設(shè)置為 dev,beijing profile 中將 build.profile.id 的值設(shè)置為 beijing,shanghai profile 中將 build.profile.id 的值設(shè)置為 shanghai。
同時(shí),這個(gè)配置中還指定了資源文件的位置是 src/main/resources/, 在生成這些資源文件的時(shí)候使用 profiles/${build.profile.id}_config.properties 中定義的變量進(jìn)行內(nèi)容的替換。
在打包的時(shí)候,如果我們執(zhí)行:mvn package -P beijing , 這時(shí)首先會(huì)找到beijing的profile,將build.profile.id賦值為beijing,
這樣定義變量的文件名就變成了 profiles/beijing_config.properties, 將config.properties 打入war包的時(shí)候會(huì)從 profiles/beijing_config.properties 中讀取 ${mysql.host} 和 ${mysql.port} 的值。最后war包中的 config.properties
就變成了:
mysql.host = beijing.mysql.domain mysql.port = 4534 cache.size = 1000
當(dāng)沒(méi)有指定 -P 選項(xiàng)的時(shí)候,由于 dev 這個(gè)環(huán)境配置了
關(guān)于配置文件的讀取,可以使用Owner減少代碼量,并且支持動(dòng)態(tài)加載。這里有一個(gè)簡(jiǎn)要的說(shuō)明
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/69863.html
摘要:的配置文件默認(rèn)為或,此外僅以配置為說(shuō)明。的由的標(biāo)簽管理。管理由于構(gòu)建是基于或,此處僅以說(shuō)明。管理分五步,以下詳細(xì)介紹。并且為表示,會(huì)將文件內(nèi)容的替換為相應(yīng)的變量如文件中的會(huì)替換為屬性值。 1. Spring Profile Spring可使用Profile決定程序在不同環(huán)境下執(zhí)行情況,包含配置、加載Bean、依賴等。 Spring的Profile一般項(xiàng)目包含:dev(開(kāi)發(fā)), test...
摘要:,整合剛才已經(jīng)下載好了,現(xiàn)在我們添加文件標(biāo)簽加一行如下然后是和在文件中添加數(shù)據(jù)源配置連接本地,新建數(shù)據(jù)庫(kù),查詢執(zhí)行項(xiàng)目頁(yè)面列出來(lái)的語(yǔ)句自動(dòng)建立該項(xiàng)目需要的數(shù)據(jù)庫(kù)內(nèi)容。 簡(jiǎn)介:本文主要介紹把現(xiàn)今主流的springboot框架項(xiàng)目和精準(zhǔn)測(cè)試工具進(jìn)行結(jié)合和應(yīng)用,通過(guò)精準(zhǔn)測(cè)試的數(shù)據(jù)穿透、數(shù)據(jù)采集、測(cè)試用例與代碼的雙向追溯、數(shù)據(jù)分析等一系列精準(zhǔn)測(cè)試的特有功能,達(dá)到對(duì)項(xiàng)目質(zhì)量的保證。 本次環(huán)境搭...
摘要:項(xiàng)目根目錄項(xiàng)目名項(xiàng)目版本號(hào)項(xiàng)目目錄打包的名字二依賴管理概述通過(guò)在配置依賴坐標(biāo),會(huì)自動(dòng)幫我們下載依賴的構(gòu)件。關(guān)于父模塊的依賴配置注意兩點(diǎn)一般都是通過(guò)來(lái)配置所有依賴及其版本號(hào),然后子模塊,在自己的文件中聲明依賴即可,不用再指定版本,以確保統(tǒng)一。 一、Maven 1.1 為什么寫(xiě)Maven 工欲善其事,必先利其器。如今Java相關(guān)開(kāi)發(fā),基本離不開(kāi)Maven、Gradle、MAT、Hudson...
摘要:采用了一種被稱(chēng)之為概念來(lái)管理項(xiàng)目,所有的項(xiàng)目配置信息都被定義在一個(gè)叫做的文件中,通過(guò)該文件,可以管理項(xiàng)目的整個(gè)聲明周期,包括編譯,構(gòu)建,測(cè)試,發(fā)布,報(bào)告等等。目前下絕大多數(shù)項(xiàng)目都已經(jīng)采用進(jìn)行管理。 前言:對(duì)于微軟技術(shù)死忠的筆者來(lái)說(shuō),學(xué)習(xí)JAVA靈活又復(fù)雜的技術(shù)是件多么痛苦的事,開(kāi)始想念我大微軟簡(jiǎn)單的開(kāi)發(fā)環(huán)境搭建以及完整詳盡的開(kāi)發(fā)文檔,還有那一看就懂的案例教程了...可是為了工作,依舊不...
摘要:項(xiàng)目構(gòu)建基礎(chǔ)從屬于筆者的現(xiàn)代開(kāi)發(fā)基礎(chǔ)系列文章,介紹了的歷史背景與多種構(gòu)建工具對(duì)比,以及的基本配置安裝與使用本文涉及的參考資料聲明在學(xué)習(xí)與實(shí)踐資料索引以及學(xué)習(xí)與資料索引。 Maven 項(xiàng)目構(gòu)建基礎(chǔ)從屬于筆者的現(xiàn)代 Java 開(kāi)發(fā)基礎(chǔ)系列文章,介紹了 Maven 的歷史背景與多種構(gòu)建工具對(duì)比,以及 Maven 的基本配置安裝與使用;本文涉及的參考資料聲明在 Java 學(xué)習(xí)與實(shí)踐資料索引以及...
閱讀 1080·2021-11-25 09:43
閱讀 703·2021-11-22 14:45
閱讀 3830·2021-09-30 09:48
閱讀 1069·2021-08-31 09:41
閱讀 1977·2019-08-30 13:52
閱讀 1983·2019-08-30 11:24
閱讀 1351·2019-08-30 11:07
閱讀 958·2019-08-29 12:15