天天看點

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

通過本系列的前篇文章:

在之前文章中我們學習到了

SpringCloud Alibaba

讀取

Nacos Config

内定義的

properties

類型的配置檔案資訊,并且使用

Nacos Console

進行修改配置資訊後可以在應用程式内實時更新。

本章目标

Nacos Config

所支援的配置檔案類型既然有多種,那我們該怎麼配置才能讀取不同的配置類型的内容呢?

快速入門

我們還是先來通過

Nacos Console

來添加本章所使用的配置資訊,要注意配置的字尾名改為

yaml

Nacos Server

需要在本地安裝

Nacos Server

才能完成本章的内容講解,具體的安裝步驟通路

Nacos 官方文檔

建立配置

配置資訊如下所示:

建立應用

我們在

Nacos Console

已經添加了本章所使用的

Yaml

類型的配置資訊,下面通過

Idea

開發工具建立一個

SpringBoot

項目,并添加

SpringCloud Alibaba

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-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>
//...           

配置檔案擴充名

在之前講到過預設的配置檔案擴充名為

properties

,既然我們本章是讀取的

yaml

類型的檔案,那肯定需要修改這個配置參數,

application.yml

配置檔案如下所示:

spring:
  application:
    name: hengboy-spring-cloud
  # nacos config
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        # 配置檔案字尾名為yaml
        file-extension: yaml           

通過

spring.cloud.nacos.config.file-extension

參數進行修改預設的

Nacos Config

所比對的預設檔案擴充名。

在上面的配置檔案内要注意的時,

hengboy-spring-cloud

要與

Nacos Console

内添加的配置

data-id

前部分比對,也就是比對:

hengboy-spring-cloud.yaml

讀取配置

下面我們通過簡單的幾個步驟來讀取我們配置的

yaml

配置内容。

第一步:建立一個配置讀取的

Controller

建立一個名為

ConfigController

的配置查詢控制器,并且類上配置

@RequestMapping("/config")

第二步:通過@Value注解讀取配置資訊

我們在之前章節通過

applicationContext#getEnvironment#getProperty

方法可以直接擷取對應的

Nacos Config

的配置資訊,當然

SpringCloud Alibaba

也同樣支援通過

@Value

注解來擷取配置資訊,如下所示:

@RestController
@RequestMapping(value = "/config")
@RefreshScope
public class ConfigController {
    /**
     * 讀取hengboy.name配置資訊
     */
    @Value(value = "${hengboy.name:}")
    private String userName;
    /**
     * 讀取hengboy.age配置資訊
     */
    @Value(value = "${hengboy.age:}")
    private String userAge;

    /**
     * 擷取配置内容
     *
     * @return
     */
    @RequestMapping(value = "/get")
    public String getConfig() {
        return userName + ":" + userAge;
    }

}           
解釋:

${hengboy.name:}

表示需要從全局的配置内容中讀取

hengboy.name

的配置資訊,如果沒有找到則使用

冒号(:)

後的内容,當然這裡我們沒有添加任何的預設值,如果沒有配置則為

空字元串

第三步:通過@RefreshScope注解實時重新整理配置資訊

ConfigController

控制器上添加了注解

@RefreshScope

主要目的是來實時同步通過

Nacos Console

修改的配置内容。

@RefreshScope

注解是

SpringCloud

内部提供,用于

配置熱加載

第四步:運作測試

啟動應用程式,我們通過

curl http://localhost:8080/config/get

可以擷取我們在

Nacos Console

添加的配置内容:

admin:25

第五步:實時更新測試

Nacos Console

我們修改下兩個參數的内容并且

重新釋出配置資訊

hengboy.name : admin -> admin-change-after
hegnboy.age : 25 -> 30           

再次通過

curl http://localhost:8080/config/get

指令通路,我們已經可以得到更新後的配置内容:

admin-change-after:30

代碼示例

本章代碼在源碼的名稱為:

spring-cloud-alibaba-nacos-config-yaml

,在

SpringCloud-Alibaba/Nacos-Config

目錄下。

開源資訊

  • MicroJob

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

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

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

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

下面的内容你感興趣嗎?