springcloud Alibaba入門系列之Nacos配置文件加載順序

前面我們學(xué)習(xí)了:

在本篇我們在上節(jié)的基礎(chǔ)上進(jìn)行知識的拓展,來學(xué)習(xí)下Nacos加載配置文件的順序

項目搭建

首先創(chuàng)建一個名為alibaba-nacos-config-load的子模塊,創(chuàng)建過程如前面的項目一樣,接著引入相關(guān)依賴,代碼如下:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Greenwich.SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>0.2.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  • 接著來看配置文件,代碼如下:
server.port=9005
spring.application.name=alibaba-nacos-config-load
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.file-extension=properties
  • 接著來看我們的啟動類代碼:
package com.cacmp.alibaba.nacos.config.load;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class AlibabaNacosConfigLoadApplication {

public static void main(String[] args) {
    SpringApplication.run(AlibabaNacosConfigLoadApplication.class, args);
}

同樣我們將它最為服務(wù)進(jìn)行注冊,最后來看我們的接口:

package com.cacmp.alibaba.nacos.config.load.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author cb
 */
@RestController
@RefreshScope
public class NacosConfigController {

@Value("${config:}")
 String str;

@GetMapping("/test")
public String testConfig() {

    System.out.println(str);
    return str;
}

上面的配置都是最基本的配置,可以說是我們上節(jié)的內(nèi)容,接下來我們來看常見的三種加載順序:

profiles方式

首先在我們的配置中添加配置,代碼如下:

server.port=9005
spring.application.name=alibaba-nacos-config-load
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.file-extension=properties
spring.profiles.active=dev

接著啟動我們的服務(wù),可以在控制臺上看到如下的加載配置順序:

 Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='alibaba-nacos-config-load-dev.properties'}, NacosPropertySource {name='alibaba-nacos-config-load.properties'}]}
2019-10-28 22:11:24.537  INFO 2080 --- [           main] .n.c.l.AlibabaNacosConfigLoadApplication : The following profiles are active: dev
微信截圖_20191028221452.png

此時我們會在控制臺上如上圖和代碼中的兩個配置,此時我們還有在nacos管理臺上配置這兩個配置,所以你是在日志中是無法查看相關(guān)的dataId和group信息,所以接下里的事大家應(yīng)該清楚了吧,我們配置這兩個配置信息,如圖:

微信截圖_20191028222346.png

接著我們訪問http://127.0.0.1:9005/test,會看到如下圖的信息:

微信截圖_20191028222601.png

會看到這里是加載的dev的配置內(nèi)容,同樣在控制臺的日志信息中我們會看到如下圖的信息:

微信截圖_20191028222637.png

那么我們是不是可以得出一些結(jié)論,當(dāng)配置文件中配置了spring.profiles.active時,springboot優(yōu)先加載它,會覆蓋前面的配置信息,那么當(dāng)我們把在Nacos配置中心的dev配置信息刪除后會如何了,來看:

微信截圖_20191028223439.png

此時繼續(xù)訪問上面的地址我們會看到:

微信截圖_20191028223604.png

會看到加載我們最普通的配置,那么是否又可以得出結(jié)論當(dāng)不存在dev的配置信息時,默認(rèn)會加載spring.application.name的配置,我們接著看另外一種方式:

group 方式

group就是我們要說的第二種方式,我們可能在學(xué)Nacos的作為配置中心時,在管理臺需要配置,其中就有一項就是group,但是我們一般不會動,默認(rèn)為DEFAULT_GROUP,我們可以看如圖:

group.png

為什么是它了,看了源碼就知道,代碼如下:

源碼1.png
源碼2.png

初始的時候,會設(shè)置為默認(rèn)的group,對于group的作用我個人認(rèn)為是nacos對配置信息的一種更深層次的隔離作用,你可以建很多個組,接下來我們來實際操作下,來看我們的配置文件:

server.port=9005
spring.application.name=alibaba-nacos-config-load
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.file-extension=properties
spring.cloud.nacos.config.group=CONFIG_GROUP

我們可以發(fā)現(xiàn)這里先去掉profiles的配置,我們配置group,直接啟動我們的服務(wù),會在控制臺發(fā)現(xiàn):

微信截圖_20191029213126.png

這里還是加載alibaba-nacos-config-load.properties的一個屬性配置,但我們這里卻找不到dataId日志的輸出,接著訪問上述的服務(wù)來獲取配置信息,會發(fā)現(xiàn)沒有結(jié)果,具體原因為:

  • 當(dāng)我們是通過group時,首先會在配置中心就是group的匹配,接著才是profiles的,因為我們此時沒有在配置中心配置我們的group,也就是CONFIG_GROUP,接著看:
配置詳情.png

接著我們會在控制臺發(fā)現(xiàn),有我們需要的日志信息了,如圖所示:

微信截圖_20191029214129.png

分組確實是我們想要的,dataId同時也存在,我們訪問接口來獲取下配置信息,如圖:

微信截圖_20191029214435.png

從結(jié)果我們可以證實了那句話,當(dāng)有g(shù)roup配置時,首先是通過group進(jìn)行匹配,同時也說明了,不同group之間的dataId可以相同,接著我們添加profiles配置,代碼如下:

server.port=9005
spring.application.name=alibaba-nacos-config-load
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.file-extension=properties
spring.cloud.nacos.config.group=CONFIG_GROUP
spring.profiles.active=dev

啟動我們的服務(wù),會在控制臺的日志中發(fā)現(xiàn)如下信息:

Loading nacos data, dataId: 'alibaba-nacos-config-load.properties', group: 'CONFIG_GROUP'
Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='alibaba-nacos-config-load-dev.properties'}, NacosPropertySource {name='alibaba-nacos-config-load.properties'}]}
The following profiles are active: dev

dataId不變,但是這里需要加載alibaba-nacos-config-load-dev.properties和alibaba-nacos-config-load.properties這兩個配置文件,我們通過訪問接口來獲取配置信息,會發(fā)現(xiàn)還是輸出alibaba-nacos-config-load-group.properties配置的信息,這也是符合我們之前說的,當(dāng)有spring.profiles.active配置時,會優(yōu)先加載它,沒有的話會加載spring.application.name的,我們在配置中心添加alibaba-nacos-config-load-dev.properties信息,如圖:

dev.png

當(dāng)我們發(fā)布時,會發(fā)現(xiàn)控制臺會刷新一下,查看日志信息如下:

Loading nacos data, dataId: 'alibaba-nacos-config-load.properties', group: 'CONFIG_GROUP'
Loading nacos data, dataId: 'alibaba-nacos-config-load-dev.properties', group: 'CONFIG_GROUP'
CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='alibaba-nacos-config-load-dev.properties'}, NacosPropertySource {name='alibaba-nacos-config-load.properties'}]}

訪問接口,來獲取配置信息,結(jié)果如下圖:

dev1.png

是我們想要的結(jié)果,我們來看最后一種方式

namespace方式

namespace是nacos配置中心的命名空間,對于配置文件的隔離更深,我們來看配置文件:

server.port=9005
spring.application.name=alibaba-nacos-config-load
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.file-extension=properties

為了演示更直觀,我這里去掉了group和profile的配置,然后啟動服務(wù),會在控制臺的日志輸出中發(fā)現(xiàn):

namespace3.png

會發(fā)現(xiàn)它需要去加載alibaba-nacos-config-load.properties的配置信息,同樣也是找不到dataId,我們來配置,如圖顯示創(chuàng)建一個NS的namespace:

namespace.png

接著在該命名空間下創(chuàng)建dataId為alibaba-nacos-config-load.properties的配置信息,如圖:

namspace1.png
微信截圖_20191029222733.png

在來訪問下服務(wù)接口來獲取配置信息,會發(fā)現(xiàn)沒有任何內(nèi)容輸出,原因是我們的bootstrap.properties文件中的namespace配置不能直接寫成NS,應(yīng)該是命名空間ID:

spring.cloud.nacos.config.namespace=26497656-1e2b-42b5-905b-d6d578b28885
命名空間id.png

重啟我們的服務(wù),訪問接口獲取配置信息,在我們的控制臺會有這樣的日志輸出,代碼如下:

Loading nacos data, dataId: 'alibaba-nacos-config-load.properties', group: 'DEFAULT_GROUP'
 Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='alibaba-nacos-config-load.properties'}]}

來看輸處的配置信息,如圖:

namespace4.png

是我們想要的結(jié)果,關(guān)于nacos的配置文件的加載順序和隔離級別就到這了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末阱缓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茉盏,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡凯旋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門钉迷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來至非,“玉大人,你說我怎么就攤上這事糠聪』耐郑” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵枷颊,是天一觀的道長戳杀。 經(jīng)常有香客問我,道長夭苗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任隔缀,我火速辦了婚禮题造,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘猾瘸。我一直安慰自己界赔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布牵触。 她就那樣靜靜地躺著淮悼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪揽思。 梳的紋絲不亂的頭發(fā)上袜腥,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機(jī)與錄音钉汗,去河邊找鬼羹令。 笑死鲤屡,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的福侈。 我是一名探鬼主播酒来,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼肪凛!你這毒婦竟也來了堰汉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤伟墙,失蹤者是張志新(化名)和其女友劉穎翘鸭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體远荠,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡矮固,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了譬淳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片档址。...
    茶點(diǎn)故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖邻梆,靈堂內(nèi)的尸體忽然破棺而出守伸,到底是詐尸還是另有隱情,我是刑警寧澤浦妄,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布尼摹,位于F島的核電站,受9級特大地震影響剂娄,放射性物質(zhì)發(fā)生泄漏蠢涝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一阅懦、第九天 我趴在偏房一處隱蔽的房頂上張望和二。 院中可真熱鬧,春花似錦耳胎、人聲如沸惯吕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽废登。三九已至,卻和暖如春郁惜,著一層夾襖步出監(jiān)牢的瞬間堡距,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吏颖,地道東北人搔体。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像半醉,于是被迫代替她去往敵國和親疚俱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評論 2 355

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