Nacos(四):SpringCloud專案中接入Nacos作為配置中心
Nacos(四):SpringCloud專案中接入Nacos作為配置中心
LarsCheng2019-07-23 18:37:104804收藏15 分類專欄:SpringCloudNacos從入門到避坑文章標籤:NacosSpringCloud註冊中心配置中心 版權
前言
通過前兩篇文章:
相信大家已經對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 的拼接格式變成p r e f i x . {prefix}.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控制檯中可以看到我們註冊的服務
[外鏈圖片轉存失敗(img-HzOLZwKk-1563861804812)(https://raw.githubusercontent.com/larscheng/myImg/master/blogImg/Nacos/20190723102246.png)]
此時呼叫介面進行測試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