前言
通過前兩篇文章:
相信大家已經對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
來配置。目前只支持properties
和yaml
類型。
注意:當 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
注解,可以使當前類下的配置支持動態更新。
到此代碼部分的工作已經完成
啟動測試
- 保證Nacos-Server已經啟動
- 檢查配置文件是否已經添加
- 啟動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
參考
- 文章作者: LarsCheng
- 文章鏈接: 本文首發於個人博客:https://www.larscheng.com/nacos-namespace/
- 發布方式:OpenWrite 最懂你的科技自媒體管理平台
- 版權聲明: 本博客所有文章除特別聲明外,均采用 CC BY-NC-SA 4.0 許可協議。轉載請注明來自 LarsCheng's Blog!