天天看點

SpringCloud Alibaba - Nacos 作為配置中心 & 讀取Properties配置資訊

SpringCloud Alibaba

阿裡巴巴

緻力于對

微服務

管理

配置

注冊

等一整套的解決方案。

簡介

Nacos

提供用于存儲配置和其他中繼資料的

K-V

存儲,為分布式系統中的外部化配置提供伺服器端和用戶端支援。使用 Spring Cloud Alibaba Nacos Config,可以在 Nacos Server 集中管理你 Spring Cloud 應用的外部屬性配置。

Nacos Config

支援多種方式的配置格式,比如:

TEXT

JSON

XML

YAML

HTML

PROPERTIES

等。

我們本章先來看下是怎麼讀取

Properties

類型的配置。

前提

本地需要安裝

Nacos Server

,具體安裝步驟通路

Nacos

官網文檔,

Nacos Server 安裝

建立項目

使用

idea

工具建立一個

SpringCloud

項目。

添加依賴

添加依賴在

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引導配置

Nacos Config

相關的配置必須在

bootstrap.yml

或者

bootstrap.properties

檔案内添加。

配置内容如下所示:

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

    依賴預設會使用該值的内容作為

    DATA-ID

    來比對讀取

    Nacos Config

    ,讀取規則下面介紹。
  • spring.cloud.nacos.config.server-addr

    配置

    nacos server

    的位址資訊,

    nacos server

    本地安裝通路

讀取Nacos配置

在啟動類内添加讀取

Nacos Config

部分代碼,為了跟下一步做鋪墊來測試自動更新,我們間隔

1秒

後再次讀取配置内容,編碼如下所示:

/**
 * Nacos Config Properties方式
 *
 * @author:恒宇少年 - 于起宇
 * <p>
 * DateTime:2019-03-01 11:20
 * Blog:http://blog.yuqiyu.com
 * WebSite:http://www.jianshu.com/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) {
            //當動态配置重新整理時,會更新到 Enviroment中,是以這裡每隔一秒中從Enviroment中擷取配置
            String userName = applicationContext.getEnvironment().getProperty("hengboy.name");
            String userAge = applicationContext.getEnvironment().getProperty("hengboy.age");
            logger.info("配置資訊,名稱:{},年齡:{}", userName, userAge);
            TimeUnit.SECONDS.sleep(1);
        }
    }
}           

測試

接下來我們來測試是否可以從

Nacos Config

内讀取相關的配置資訊,我們需要通路

Nacos Console

控制台來添加配置資訊。

通路:

Nacos Console

,預設

使用者名/密碼

為:

nacos/nacos

添加 Nacos Config

通過

配置清單

内添加配置資訊,添加時

DATA-ID

的組成部分為:

{spring.application.name}.{file-extension}

file-extension

檔案字尾名預設為

properties

,如果需要修改,在

bootstrap

檔案内進行修改配置

spring.cloud.nacos.config.file-extension

的值。

添加的配置資訊如下所示:

DATA ID : alibaba-nacos-config-client.properties
Group : DEFAULT_GROUP
配置内容 : 
hengboy.name=admin-properties
hengboy.age=11           

輸出 Nacos Config

一切就緒,我們通過

Application

方式啟動項目,檢視控制台列印内容如下所示:

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           

自動更新配置

在上面的步驟中我們已經可以從

Nacos Config

内讀取到對應的

properties

配置檔案内容資訊。

那我們如果通過

Nacos Console

進行修改了配置内容後,我們的應用程式是不是可以立馬擷取到修改後的值呢?

我們帶着這個疑問,去

Nacos Console

找到

DATA-ID = alibaba-nacos-config-client.properties

的配置資訊,修改

hengboy.age

的值為

25

,重新釋出配置資訊後檢視我們的應用程式的控制台輸出内容如下所示:

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           

可以看到輸出的内容,我們修改完

外部的配置資訊

後,

Nacos Client

會自動重新整理所修改的配置檔案内容,始終讓配置内容保持與

Nacos Config

内配置一緻。

我們通過

Nacos Console

修改的目前

DATA-ID

下的任何參數都會在控制台

Refresh keys changed: [xxx,xxx]

列印。

總結

本章簡單的講解了

SpringCloud Alibaba

的配置中心

讀取配置資訊方式

以及

自動更新配置資訊

實作,在開頭我們說了

Nacos Config

所支援的配置檔案的格式不僅僅是

properties

這一種,不過這是預設的一種方式,在下一章我們來講解下

YAML

方式的配置資訊讀取。

源碼位置

開源資訊

  • MicroJob

    micro-job是一款分布式任務排程執行架構,用于叢集環境負載均衡條件下的任務分發以及任務消費

任務消費者節點定義任務 & 任務自動上報

任務排程器自動根據負載均衡政策來選擇不同的消費者節點進行任務消費

[點選檢視MicroJob官方文檔](http://job.yuqiyu.com/#/)