Spring Cloud Alibaba基礎教程第三篇:Nacos做爲配置中心

在以前的兩篇文章
Spring Cloud Alibaba基礎教程第一篇:使用Nacos實現服務註冊與發現
Spring Cloud Alibaba基礎教程第二篇:消費方式
相信咱們已經簡單掌握,如何利用Nacos搭建註冊中心並實現服務的註冊與發現。還有在Alibaba Spring Cloud中,咱們一樣可使用Ribbon和Feign兩種服務消費方式。那麼接下來,咱們再來學習一下Nacos的配置管理,來感覺它的美java

一. Nacos配置管理簡介

經過官方文檔瞭解到,Nacos不只有服務發現和服務健康監測,實現服務的註冊發現以外,還有動態配置服務。Nacos動態配置服務可讓您以中心化、外部化和動態化的方式管理全部環境的應用配置和服務配置,咱們能夠將整個架構體系內的全部配置都集中在Nacos中存儲。這個道理和Spring Cloud Config是同樣的,優勢主要有如下幾點:git

  • 動態配置消除了配置變動時從新部署應用和服務的須要,讓配置管理變得更加高效和敏捷
  • 配置中心化管理讓實現無狀態服務變得更簡單,讓服務按需彈性擴展變得更容易

Nacos 提供用於存儲配置和其餘元數據的 key/value 存儲,爲分佈式系統中的外部化配置提供服務器端和客戶端支持。使用 Spring Cloud Alibaba Nacos Config,您能夠在 Nacos Server 集中管理你 Spring Cloud 應用的外部屬性配置。 Spring Cloud Alibaba Nacos Config 是 Config Server 和 Client 的替代方案,客戶端和服務器上的概念與 Spring Environment 和 PropertySource 有着一致的抽象,在特殊的 bootstrap 階段,配置被加載到 Spring 環境中。當應用程序經過部署管道從開發到測試再到生產時,您能夠管理這些環境之間的配置,並確保應用程序具備遷移時須要運行的全部內容github

二. Nacos配置實戰

接下來介紹如何在Nacos中建立配置內容以及如何在Spring Cloud應用中獲取Nacos的配置信息 演示相關版本:web

Nacos: 1.0.1 Spring Boot: 2.1.6.RELEASE Spring Cloud: Greenwich.SR1 Spring Cloud Alibaba: 0.2.2.RELEASEspring

建立Nacos配置

打開瀏覽器輸入: localhost:8848 輸入帳號密碼 進入Nacos控制主頁apache

點擊右上角➕ 填入如下相關配置

PS:json

  • Data ID:填入alibaba-nacos-config-client.properties(爲何這樣?下面慢慢看)
  • Group:不修改,使用默認值DEFAULT_GROUP
  • 配置格式:支持六種格式 我這裏選擇Properties
  • 配置內容:應用要加載的配置內容,這裏僅做爲示例,作簡單配置,好比:gongzhonghao=lihaodong_blog

在 Nacos Spring Cloud 中,dataId 的完整格式以下:${prefix}-${spring.profile.active}.${file-extension}bootstrap

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

配置完成後是這樣的瀏覽器

參數配置完畢,確定須要程序來獲取,安排!bash

建立配置客戶端

這裏使用的姿式和上篇文章同樣

pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.xd</groupId>
        <artifactId>SpringCloudAlibabaLearn</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../</relativePath>
    </parent>
    <artifactId>alibaba-nacos-config-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>alibaba-nacos-config-client</name>
    <description>Nacos做爲配置中心服務</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
複製代碼

主要仍是在以前的基礎做爲子模塊,集成父pom文件,添加nacos-config依賴

bootstrap.properties
server.port=8084
#配置客戶端 Nacos中建立的配置Data Id匹配( 除了.properties或者.yaml後綴)
spring.application.name=alibaba-nacos-config-client
#註冊服務到nacos
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
複製代碼

主要配置註冊中心和配置中心 注意:這裏必須使用bootstrap.properties。同時,spring.application.name值必須與上一階段Nacos中建立的配置Data Id匹配(除了.properties或者.yaml後綴)

建立應用主類,並實現一個接口:
package com.xd.alibabanacosconfigclient;

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

@RestController
@RefreshScope //主要用來讓這個類下的配置內容支持動態刷新
@SpringBootApplication
public class AlibabaNacosConfigClientApplication {

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


    // nacos配置的參數
    @Value("${gongzhonghao}")
    private String gongzhonghao;

    @GetMapping("/test")
    public String getGongzhonghao() {
        return gongzhonghao;
    }
}
複製代碼

@SpringBootApplication: 定義是個Spring Boot應用
@RestController: @RestController註解,至關於@Controller+@ResponseBody兩個註解的結合,返回json數據不須要在方法前面加@ResponseBody註解 @Value: 注入了key爲gongzhonghao的配置(默認爲空字符串),這個配置會經過/test接口返回,後續咱們會經過這個接口來驗證Nacos中配置的加載。 @RefreshScope: 主要用來讓這個類下的配置內容支持動態刷新,也就是當咱們的應用啓動以後,修改了Nacos中的配置內容以後,這裏也會立刻生效

啓動程序

控制檯打印註冊中心地址和配置中心相關信息 說明啓動成功

測試

打開瀏覽器,輸入 http://localhost:8084/test 內容顯示以下:

獲取的內容是我在nacos配置的驗證配置成功
咱們經過Nacos頁面,修改這個內容,點擊發布以後

從新查詢 http://localhost:8084/test

能夠看到返回結果變了

三. 參考資料:

四. 代碼示例

若是您對這些感興趣,歡迎star、follow、收藏、轉發給予支持!

相關文章
相關標籤/搜索