Nacos(四):SpringCloud項目中接入Nacos作為配置中心
- 2019 年 10 月 3 日
- 筆記
前言
通過前兩篇文章:
相信大家已經對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.1nacosbin),直接雙擊執行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!