Nacos(三)配置中心

我的設想

一個Spring項目在沒有配置中心的時候,通常需要寫4個配置文件辞友,application.yml,application-dev.yml,application-prod.yml和application-test.yml侈离。

一般來說application.yml定義了項目的一些基本信息二鳄,如srping.application.name,server.port,logging.level等基本信息锹淌,而數(shù)據(jù)庫备图、mq等配置信息則可能需要根據(jù)不同的環(huán)境來進行配置影所,因此基本會放在其他三個配置中蹦肴,并在application.yml中通過spring.profiles.active來指定項目環(huán)境。當使用nacos來進行項目的配置時猴娩,由于spring啟動時需要從遠程獲取配置信息阴幌,所以從前application.yml相關的配置都需要在bootstrap.yml中勺阐,以此類推,dev矛双、prod渊抽、test也是如此。差別在于议忽,現(xiàn)在不需要將配置寫在這些yml中了懒闷,只需要在項目的bootstrap*.yml中配置需要從遠端獲取Configuration的元數(shù)據(jù)即可由于沒有具體實現(xiàn)過,所以還是來看看到底應該怎么做

添加nacos server配置

不管怎么樣栈幸,將如dev愤估、prod這些環(huán)境配置在nacos server上都是必須的,nacos支持非常多樣化的配置速址。先來回顧一下nacos的namespace玩焰、Data ID、Group:

Namespace

命名空間芍锚,用于隔離用戶配置昔园。不同的命名空間可以有相同的Group和DataID。Namespace的一個常見場景是在不同的環(huán)境中區(qū)分和隔離配置闹炉,比如在開發(fā)和測試環(huán)境以及生產(chǎn)環(huán)境中蒿赢。

Data ID

Data ID組成如下:
${prefix}-${spring.profile.active}.${file-extension}
prefix的默認值就是spring.application.name,也可以通過spring.cloud.nacos.config.prefix配置

spring.profile.active即項目所在profile渣触,如test羡棵、dev、prod嗅钻,若為空皂冰,則Data ID會省略掉這一部分內(nèi)容,可以通過spring.profiles-active配置

file-extension是配置內(nèi)容的數(shù)據(jù)格式养篓,目前支持properties和yaml秃流,可以通過spring.cloud.nacos.config.file-extension配置

Group

群組,簡單來說區(qū)分具有相同Data ID的配置集柳弄。

不難發(fā)現(xiàn)舶胀,要在nacos server上配置dev、prod配置有很多方法碧注,我來簡單列舉一些:

  1. 設置多個namespace嚣伐,每一個namespace存放不同環(huán)境的配置文件,項目在配置時只需指定namespace即可
  2. 設置一個namespace萍丐,統(tǒng)一使用DEFAULT_GROUP轩端,通過Data ID中的${spring.profile.active}區(qū)分不同環(huán)境的配置文件,項目在配置時需要指定namespace和spring.active.profile
  3. 設置一個namespace逝变,使用不同Group基茵,項目在配置時需要指定namespace和Group
  4. 其實還有更多方案奋构,比如使用dev、prod拱层、test劃分namespace弥臼,使用Group來劃分不同的服務,不是也可以嗎舱呻?……

ps:如果不指定namespace醋火,則會使用默認的namespace,不過建議還是自己創(chuàng)建~

上面的方案對于當前項目來說都可用箱吕,但是從微服務配置的角度來說芥驳,到底哪個方案適合當前來用,才是最重要的茬高。對于微服務來說兆旬,首先,一個完整的項目會涉及到多個服務怎栽,如日志服務丽猬、用戶服務、訂單服務熏瞄。那么對于這些服務脚祟,我想我會考慮將其配置在不同的namespace中,即每一個服務對應一個namespace强饮。

隨后由桌,將目標指向單個服務,在微服務中邮丰,每一個服務都會擁有多臺實例行您,每一臺實例在相同的環(huán)境中會使用相同的配置,回顧上面三個概念的介紹剪廉,可以發(fā)現(xiàn)namespace>Group>Data ID娃循,因此,對于不同實例使用的不同環(huán)境配置斗蒋,使用Group來加以區(qū)分捌斧,如Test_Group、Dev_Group泉沾、Prod_Group捞蚂,隨后通過Data ID來標識對應的環(huán)境配置。

當然爆哑,這里還有一個問題我是存疑的(是有關服務注冊方面,所以對這里的操作影響不大舆吮,跳過不看也可)如果以服務來進行namespace劃分揭朝,那么之后注冊在namespace1的服務能否調(diào)用到注冊在namespace2的服務呢队贱?

因此,基于嚴謹認真的態(tài)度潭袱,決定使用第三種方案來做配置柱嫌!

新建namespace

ui界面的操作就不展示了,比較簡單屯换,在左側(cè)命名空間欄點進去找到添加按鈕编丘,命名空間自動生成就好了,空間名可以以服務名來標識彤悔,會比較清晰嘉抓。

新建配置

這里用不同數(shù)據(jù)庫作為兩個環(huán)境的區(qū)分,前者為unit晕窑,后者為homstay

dev環(huán)境

Data ID:example.dev.yaml
Group:DEV_GROUP

配置內(nèi)容:
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/unit?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT&useSSL=false

prod環(huán)境

Data ID:example.dev.yaml
Group:DEV_GROUP

配置內(nèi)容:
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/homestay?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT&useSSL=false

項目中配置

nacos server配置完畢后抑片,項目中需要獲取對應的遠程配置,則需要在bootstrap*.yml中進行相應的配置

bootstrap.yml

這里其實和application.yml一樣杨赤,配置一些基本的屬性敞斋,如本地端口,注冊中心地址疾牲,配置中心地址植捎,應用名以及使用環(huán)境

server:
  port: 8070

spring:
  cloud:
    nacos:
      config.:
        server-addr: localhost:8848
      discovery:
        server-addr: localhost:8848
  application:
    name: example
  profiles:
    active: dev

bootstrap-dev.yml

dev環(huán)境需要獲取到nacos server的遠程dev配置

spring:
  cloud:
    nacos:
      config:
        group: DEV_GROUP
        namespace: 7adf435f-aafe-4512-90fe-eb8b51b7cce2
        file-extension: yaml
      discovery:
        namespace: 7adf435f-aafe-4512-90fe-eb8b51b7cce2
  profiles: dev

bootstrap-prod.yml

prod環(huán)境需要獲取到nacos server的遠程prod配置

spring:
  cloud:
    nacos:
      config:
        group: PROD_GROUP
        namespace: 7adf435f-aafe-4512-90fe-eb8b51b7cce2
        file-extension: yaml
      discovery:
        namespace: 7adf435f-aafe-4512-90fe-eb8b51b7cce2
  profiles: prod

啟動項目

修改Controller

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
    @Value("${spring.datasource.url}")
    private String dataBaseUrl;


    @RequestMapping("/str")
    public String str(){return dataBaseUrl;}
}

切換環(huán)境為dev,啟動項目阳柔,訪問localhost:8070/config/get

jdbc:mysql://localhost:3306/unit?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT&useSSL=false

切換為prod焰枢,啟動項目,訪問localhost:8070/config/get

jdbc:mysql://localhost:3306/homestay?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT&useSSL=false

發(fā)現(xiàn)獲取到的數(shù)據(jù)庫配置不一樣了盔沫,到此医咨,本次配置測試就完成啦~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市架诞,隨后出現(xiàn)的幾起案子拟淮,更是在濱河造成了極大的恐慌,老刑警劉巖谴忧,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件很泊,死亡現(xiàn)場離奇詭異,居然都是意外死亡沾谓,警方通過查閱死者的電腦和手機委造,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來均驶,“玉大人昏兆,你說我怎么就攤上這事「狙ǎ” “怎么了爬虱?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵隶债,是天一觀的道長。 經(jīng)常有香客問我跑筝,道長死讹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任曲梗,我火速辦了婚禮赞警,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘虏两。我一直安慰自己愧旦,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布碘举。 她就那樣靜靜地躺著忘瓦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪引颈。 梳的紋絲不亂的頭發(fā)上耕皮,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音蝙场,去河邊找鬼凌停。 笑死,一個胖子當著我的面吹牛售滤,可吹牛的內(nèi)容都是我干的罚拟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼完箩,長吁一口氣:“原來是場噩夢啊……” “哼赐俗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起弊知,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤阻逮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后秩彤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叔扼,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年漫雷,在試婚紗的時候發(fā)現(xiàn)自己被綠了瓜富。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡降盹,死狀恐怖与柑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤价捧,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布每辟,位于F島的核電站,受9級特大地震影響干旧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妹蔽,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一椎眯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胳岂,春花似錦编整、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至产园,卻和暖如春汞斧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背什燕。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工粘勒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屎即。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓庙睡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親技俐。 傳聞我的和親對象是個殘疾皇子乘陪,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

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

  • 通過之前文章的學習我們已經(jīng)學會了使用Nacos完成服務的注冊與發(fā)現(xiàn)。同時也介紹了Spring Cloud中不同風格...
    匆匆歲月閱讀 8,717評論 0 4
  • 配置管理 1.什么是配置中心雕擂?1.1什么是配置應用程序在啟動和運行的時候往往需要讀取一些配置信息啡邑,配置基本上伴隨著...
    Gq趙閱讀 15,816評論 0 10
  • 我是一名大三學生谣拣,掐指一算,我的學生時代已經(jīng)余額不足族展。靜靜想來森缠,過往已經(jīng)模糊,未來卻也迷茫仪缸。 大一新生贵涵,我...
    阿琴閱讀 211評論 0 3
  • 為什么要記錄今天呢?是因為傳統(tǒng)節(jié)日的氣氛下有點兒多愁善感了,又可能是因為我太無聊了宾茂。每年的今天都會和范女士去姥爺...
    喬頌伊閱讀 265評論 1 2
  • 云南是我最喜歡的花瓷马,他長得很像你的,而且還是一串一串的跨晴。我覺得他應該就是由此得名的吧欧聘。鈴蘭大多數(shù)都是白色的。不過還...
    妙心語閱讀 308評論 0 1