SpringCloud Alibaba - Nacos 作為配置中心 & 讀取Properties配置信息

SpringCloud Alibaba阿里巴巴致力于對(duì)微服務(wù)管理配置、注冊(cè)等一整套的解決方案。

簡(jiǎn)介

Nacos 提供用于存儲(chǔ)配置和其他元數(shù)據(jù)的 K-V 存儲(chǔ),為分布式系統(tǒng)中的外部化配置提供服務(wù)器端和客戶端支持。使用 Spring Cloud Alibaba Nacos Config,可以在 Nacos Server 集中管理你 Spring Cloud 應(yīng)用的外部屬性配置。

Nacos Config支持多種方式的配置格式,比如:TEXTJSON、XMLYAML、HTML、PROPERTIES等。
我們本章先來(lái)看下是怎么讀取Properties類型的配置。

前提

本地需要安裝Nacos Server,具體安裝步驟訪問(wèn)Nacos官網(wǎng)文檔,Nacos Server 安裝

創(chuàng)建項(xiàng)目

使用idea工具創(chuàng)建一個(gè)SpringCloud項(xiàng)目。

添加依賴

添加依賴在pom.xml配置文件如下所示:

//...
<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
        <spring-cloud-alibaba.version>0.2.1.RELEASE</spring-cloud-alibaba.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--alibaba nacos config-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <!--SpringCloud-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--SpringCloud Alibaba-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
//...

bootstrap引導(dǎo)配置

Nacos Config相關(guān)的配置必須在bootstrap.yml或者bootstrap.properties文件內(nèi)添加。
配置內(nèi)容如下所示:

spring:
  application:
    name: alibaba-nacos-config-client
  # nacos config  
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848

  • spring.application.name
    spring-cloud-starter-alibaba-nacos-config依賴默認(rèn)會(huì)使用該值的內(nèi)容作為DATA-ID來(lái)匹配讀取Nacos Config,讀取規(guī)則下面介紹。
  • spring.cloud.nacos.config.server-addr
    配置nacos server的地址信息,nacos server本地安裝訪問(wèn)Nacos Server 安裝

讀取Nacos配置

在啟動(dòng)類內(nèi)添加讀取Nacos Config部分代碼,為了跟下一步做鋪墊來(lái)測(cè)試自動(dòng)更新,我們間隔1秒后再次讀取配置內(nèi)容,編碼如下所示:

/**
 * Nacos Config Properties方式
 *
 * @author:恒宇少年 - 于起宇
 * <p>
 * DateTime:2019-03-01 11:20
 * Blog:http://blog.yuqiyu.com
 * WebSite:http://www.itdecent.cn/u/092df3f77bca
 * Gitee:https://gitee.com/hengboy
 * GitHub:https://github.com/hengyuboy
 */
@SpringBootApplication
public class SpringCloudAlibabaNacosConfigPropertiesApplication {
    /**
     * logger instance
     */
    static Logger logger = LoggerFactory.getLogger(SpringCloudAlibabaNacosConfigPropertiesApplication.class);

    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(SpringCloudAlibabaNacosConfigPropertiesApplication.class, args);
        while (true) {
            //當(dāng)動(dòng)態(tài)配置刷新時(shí),會(huì)更新到 Enviroment中,因此這里每隔一秒中從Enviroment中獲取配置
            String userName = applicationContext.getEnvironment().getProperty("hengboy.name");
            String userAge = applicationContext.getEnvironment().getProperty("hengboy.age");
            logger.info("配置信息,名稱:{},年齡:{}", userName, userAge);
            TimeUnit.SECONDS.sleep(1);
        }
    }
}

測(cè)試

接下來(lái)我們來(lái)測(cè)試是否可以從Nacos Config內(nèi)讀取相關(guān)的配置信息,我們需要訪問(wèn)Nacos Console控制臺(tái)來(lái)添加配置信息。
訪問(wèn):Nacos Console,默認(rèn)用戶名/密碼為:nacos/nacos

添加 Nacos Config

通過(guò)配置列表內(nèi)添加配置信息,添加時(shí)DATA-ID的組成部分為:{spring.application.name}.{file-extension}
file-extension文件后綴名默認(rèn)為properties,如果需要修改,在bootstrap文件內(nèi)進(jìn)行修改配置spring.cloud.nacos.config.file-extension的值。
添加的配置信息如下所示:

DATA ID : alibaba-nacos-config-client.properties
Group : DEFAULT_GROUP
配置內(nèi)容 : 
hengboy.name=admin-properties
hengboy.age=11

輸出 Nacos Config

一切就緒,我們通過(guò)Application方式啟動(dòng)項(xiàng)目,查看控制臺(tái)打印內(nèi)容如下所示:

Loading nacos data, dataId: 'alibaba-nacos-config-client.properties', group: 'DEFAULT_GROUP'
Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='alibaba-nacos-config-client.properties'}]}
配置信息,名稱:admin-properties,年齡:11

自動(dòng)更新配置

在上面的步驟中我們已經(jīng)可以從Nacos Config內(nèi)讀取到對(duì)應(yīng)的properties配置文件內(nèi)容信息。
那我們?nèi)绻ㄟ^(guò)Nacos Console進(jìn)行修改了配置內(nèi)容后,我們的應(yīng)用程序是不是可以立馬獲取到修改后的值呢?

我們帶著這個(gè)疑問(wèn),去Nacos Console找到DATA-ID = alibaba-nacos-config-client.properties的配置信息,修改hengboy.age的值為25,重新發(fā)布配置信息后查看我們的應(yīng)用程序的控制臺(tái)輸出內(nèi)容如下所示:

Loading nacos data, dataId: 'alibaba-nacos-config-client.properties', group: 'DEFAULT_GROUP'
Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='alibaba-nacos-config-client.properties'}]}
Refresh keys changed: [hengboy.age]
配置信息,名稱:admin-properties,年齡:25

可以看到輸出的內(nèi)容,我們修改完外部的配置信息后,Nacos Client會(huì)自動(dòng)刷新所修改的配置文件內(nèi)容,始終讓配置內(nèi)容保持與Nacos Config內(nèi)配置一致。
我們通過(guò)Nacos Console修改的當(dāng)前DATA-ID下的任何參數(shù)都會(huì)在控制臺(tái)Refresh keys changed: [xxx,xxx]打印。

總結(jié)

本章簡(jiǎn)單的講解了SpringCloud Alibaba的配置中心讀取配置信息方式以及自動(dòng)更新配置信息實(shí)現(xiàn),在開(kāi)頭我們說(shuō)了Nacos Config所支持的配置文件的格式不僅僅是properties這一種,不過(guò)這是默認(rèn)的一種方式,在下一章我們來(lái)講解下YAML方式的配置信息讀取。

源碼位置

作者個(gè)人 博客
使用開(kāi)源框架 ApiBoot 助你成為Api接口服務(wù)架構(gòu)師

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容