SpringCloud Alibaba —— Nacos 配置中心

前文

SpringCloud 簡介

SpringCloud 版本選型

SpringCloud 工程構建

SpringCloud —— Eureka 註冊中心

SpringCloud —— Eureka 集羣

SpringCloud —— 服務註冊進 Eureka 集羣

SpringCloud —— Eureka 自我保護

SpringCloud —— SpringCloud Consul 實現服務註冊中心

SpringCloud —— 三個註冊中心的異同點

SpringCloud —— Ribbon

SpringCloud —— Ribbon 負載均衡算法

SpringCloud —— OpenFeign

SpringCloud —— Hystrix 簡介

SpringCloud —— Hystrix 斷路器

SpringCloud —— HystrixDashboard 服務監控

SpringCloud —— Gateway 網關

SpringCloud —— Config 配置中心

SpringCloud —— Sleuth 分佈式請求鏈路跟蹤

SpringCloud Alibaba —— Nacos 服務註冊


    前面使用 SpringCloud Config 實現配置中心 的時候是比較麻煩的,各種配置和依賴很複雜的

    SpringCloud Alibaba 退出的 Nacos 除了可以實現註冊中心以外,還可以實現配置中心,而且實現非常簡單,下面就用 Nacos 實現配置中心

基礎配置

新建一個模塊

目錄結構如下:
在這裏插入圖片描述

POM

老規矩,不需添加的依賴可以不加

<dependencies>

    <!-- Nacos Config -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>

    <!-- SpringCloud Alibaba Nacos-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

    <!-- SpringBoot整合Web組件 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!--日常通用jar包配置-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>RELEASE</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>RELEASE</version>
        <scope>test</scope>
    </dependency>
</dependencies>

YML

這裏需要配置兩個 yml 文件,爲什麼需要配置兩個 yml 文件呢?

Nacos 與 SpringCloud-Config 一樣,在項目初始化時,要保證先從配置中心進行配置權限,拉取配置之後,才能保證項目的正常啓動

SpringBoot 中配置文件的加載是存在優先級順序的,bootstrap 優先級高於 application

bootstrap.yml

# Nacos 配置
server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # Nacos 服務註冊中心地址
      config:
        server-addr: localhost:8848 # Nacos 作爲配置中心地址
        file-extension: yaml        # 指定 yaml 格式的配置(類似去 Github 讀取文件)

# ${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

application.yml

spring:
  profiles:
    active: dev # 表示開發環境

主啓動類

package com.java.springcloud.alibaba;

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

/**
 * @author Woo_home
 * @create 2020/5/20 16:27
 */

@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377 {
    public static void main(String[] args){
        SpringApplication.run(NacosConfigClientMain3377.class, args);
    }
}

業務類

package com.java.springcloud.alibaba.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 Woo_home
 * @create 2020/5/20 16:27
 */

@RestController
@RefreshScope   // 支持 Nacos 的動態刷新功能
public class ConfigController {

    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}

在 Nacos 中添加配置信息

Nacos 中的匹配規則

理論:

Nacos 中的 Data Id 的組成格式及與 SpringBoot 配置文件中的匹配規則

在這裏插入圖片描述
看下 Nacos 是怎麼介紹的,官網地址 https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
在這裏插入圖片描述

  • prefix 默認爲 spring.application.name 的值,也可以通過配置項 spring.cloud.nacos.config.prefix來配置。
  • spring.profile.active 即爲當前環境對應的 profile,詳情可以參考 Spring Boot文檔。 注意:當 spring.profile.active 爲空時,對應的連接符 - 也將不存在,dataId 的拼接格式變成 prefix.{prefix}.{file-extension}
  • file-exetension 爲配置內容的數據格式,可以通過配置項 spring.cloud.nacos.config.file-extension 來配置。目前只支持 properties 和 yaml 類型

公式:

${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

公式圖解:
在這裏插入圖片描述


實操:

Nacos 的該界面 點擊加號,添加配置
在這裏插入圖片描述
按照官網的說明配置一下
在這裏插入圖片描述
配置完後點擊發布按鈕
在這裏插入圖片描述
在這裏插入圖片描述
此時回到主頁面,已經將剛纔的配置添加進來了
在這裏插入圖片描述
點擊詳情選項發現內容和剛剛配置的是一致的
在這裏插入圖片描述
點擊編輯選項還可以對剛剛的配置內容進行修改
在這裏插入圖片描述

測試

  • 啓動前需要在 Nacos 客戶端 - 配置管理 - 配置管理欄目下有對應的 yaml 配置文件
  • 運行 cloud-config-nacos-client3377 的主啓動類
  • 調用接口查看配置信息 http://localhost:3377/config/info

啓動主啓動類的時候報錯了,說無法解析這個 config.info
在這裏插入圖片描述

原因是因爲這個文件名不是 yaml 後綴,這裏有點小 bug(但是有些人的是沒問題的,可能是 Nacos 及時修復了,據說 1.2.0 以後已經解決了這個問題,我這裏使用的是 1.1.4 版本的
在這裏插入圖片描述
刪除該配置文件重新新建一個配置文件,如下:

在這裏插入圖片描述
修改之後再次啓動主啓動類,可以發現,控制檯打印了 dataid 的信息
在這裏插入圖片描述

然後我們訪問 http://localhost:3377/config/info ,可以發現,我們在 Nacos 配置中心的內容已經拿過來了
在這裏插入圖片描述

自帶刷新功能

OK ,現在已經可以從 Nacos 配置中心將內容拿過來了,那麼想修改一下配置的內容怎麼辦呢?非常簡單,點擊編輯該配置文件修改配置內容就可以了
在這裏插入圖片描述
這裏講 version = 1 改爲 version = 1.0,然後保存發佈一下
在這裏插入圖片描述
再次刷新該頁面 http://localhost:3377/config/info
在這裏插入圖片描述
這樣就實現了一個動態刷新的功能


完整代碼已上傳至碼雲 完整代碼地址,感興趣的朋友可以下載運行下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章