1. 程式人生 > >Nacos(四):SpringCloud專案中接入Nacos作為配置中心

Nacos(四):SpringCloud專案中接入Nacos作為配置中心

前言

通過前兩篇文章:

  • Nacos(二):Nacos與OpenFeign的對接使用
  • Nacos(三):SpringCloud專案中接入Nacos作為註冊中心

相信大家已經對Nacos作為註冊中心的基本使用已經有了一定的瞭解。

然而,Nacos遠遠不止於此,本文我們來看一下Nacos作為配置中心在SpringCloud中的使用

我的環境

  • Windows10
  • JDK8
  • SpringCloud:Finchley.RELEASE
  • SpringBoot:2.0.4.RELEASE
  • spring-cloud-alibaba-dependencies:0.2.2.RELEASE
  • Nacos-server:1.0.1

本文的專案Demo繼續沿用之前文章中的聚合工程Nacos,若小夥伴還沒有之前的環境,可至原始碼地址中下載

啟動Nacos-Server

進入bin資料夾(目錄:nacos-server-1.0.1\nacos\bin),直接雙擊執行startup.cmd檔案,這裡具體的啟動細節就不再說明

新建配置

在Nacos-Server中新建配置,其中Data ID它的定義規則是:${prefix}-${spring.profile.active}.${file-extension}

  • prefix 預設為 spring.application.name 的值,也可以通過配置項 spring.cloud.nacos.config.prefix
    來配置。
  • spring.profile.active 即為當前環境對應的 profile,可以通過配置項 spring.profile.active 來配置。
  • file-exetension 為配置內容的資料格式,可以通過配置項 spring.cloud.nacos.config.file-extension 來配置。目前只支援 propertiesyaml 型別。

注意:當 spring.profile.active 為空時,對應的連線符 - 也將不存在,dataId 的拼接格式變成 ${prefix}.${file-extension}

這裡我建立Data Id 為nacos-config.yml

的配置檔案,其中Group為預設的DEFAULT_GROUP,配置檔案的格式也相應的選擇yaml,其內新增配置nacos.config=hello_nacos,如圖所示

建立應用

1、在聚合工程Nacos下新建Module,建立一個名為nacos-config的子工程,其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>
        <artifactId>Nacos</artifactId>
        <groupId>com.study.www</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <groupId>com.larscheng.www</groupId>
    <artifactId>nacos-config</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>nacos-config</name>
    <description>Demo project for Spring Boot</description>

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <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>

2、建立配置檔名為bootstrap.yml,注意是==bootstrap.xxx==,而不是application或者其他。原因如下

Nacos同springcloud-config一樣,在專案初始化時,要保證先從配置中心進行配置拉取,拉取配置之後,才能保證專案的正常啟動。springboot中配置檔案的載入是存在優先順序順序的,bootstrap優先順序高於application

這裡的配置檔案型別可以根據個人習慣選擇,我這裡用的時yml型別,配置內容如下


spring:
  application:
    name: nacos-config
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yml

可以看到必須可少的配置項spring.application.name
spring.cloud.nacos.discovery.server-addr指定註冊中心的地址,如果你不需要註冊該服務,也可以去掉該項,並刪除discovery依賴
spring.cloud.nacos.config.server-addr指定配置中心的地址
file-extension指定配置中心中配置檔案的格式

上面的配置是為了保證服務的正常註冊和配置獲取,以及配置DataID的正確性

3、建立對外介面來從nacos中讀取配置,NacosConfigApplication.java修改如下

@SpringBootApplication
@EnableDiscoveryClient
@RestController
@RefreshScope
public class NacosConfigApplication {

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

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

    @RequestMapping("/getValue")
    public String getValue() {
        return config;
    }
}

其中通過@Value註解,去讀取key為nacosconfig的配置的值,並通過/getValue介面返回。
加入@RefreshScope註解,可以使當前類下的配置支援動態更新。

到此程式碼部分的工作已經完成

啟動測試

  1. 保證Nacos-Server已經啟動
  2. 檢查配置檔案是否已經新增
  3. 啟動nacos-config專案

啟動成功後在Nacos控制檯中可以看到我們註冊的服務

此時呼叫介面進行測試 http://127.0.0.1:8080/getValue ,可以看到返回結果

hello_nacos

此時說明已經成功讀取到配置,下面我將Nacos-Server上的配置修改為hello_lars,看看能否動態更新

呼叫介面進行測試 http://127.0.0.1:8080/getValue ,返回結果如下

hello_lars

可以看到我通過Nacos-server的控制檯進行配置的修改,客戶端服務nacos-config也相應的進行熱更新。

總結

通過上面的測試,可見Nacos做配置中心,在SpringCloud專案中,也可以做到無縫銜接,切換到Nacos可以說知識修改配置的問題,成本也很低

專案的其他配置不變,只需要指定配置中心地址,同時將配置檔案外部管理。

本文原始碼:https://github.com/larscheng/larscheng-learning-demo/tree/master/Nacos

參考

Nacos Spring Cloud


  • 文章作者: LarsCheng
  • 文章連結: 本文首發於個人部落格:https://www.larscheng.com/nacos-namespace/
  • 釋出方式:OpenWrite 最懂你的科技自媒體管理平臺
  • 版權宣告: 本部落格所有文章除特別宣告外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 LarsCheng's Blog!