spring cloud如何集成nacos配置中心
spring cloud集成nacos配置中心
一、添加依賴
<properties>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
<nacos.version>0.9.0.RELEASE</nacos.version>
</properties>
<!-- 配置管理功能依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${nacos.version}</version>
</dependency>
二、添加bootstrap.yml配置文件
(*nacos配置中心讀取不到application.yml)
spring:
profiles:
active: dev
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
# 配置中心-指定命名空間
namespace: babc3933-84ef-43c8-8171-af2ce2fbf6e4
# 指定配置文件后綴
file-extension: yaml
#配置組
group: DEFAULT_GROUP
三、添加遠(yuǎn)程配置
1. 使用已有命名空間或者添加命名空間
2. namespace:命名空間的ID
3. 新建配置DateId 規(guī)則如下:
${prefix}-${spring.profile.active}.${file-extension}
*注意帶文件后綴
4. 配置格式選擇yaml
5. 在配置內(nèi)容中寫入配置
nacos作為SpringCloud配置中心
一、背景介紹
在分布式系統(tǒng)中動態(tài)配置中,可以避免重復(fù)重啟服務(wù),動態(tài)更改服務(wù)參數(shù)等。一句話非常重要。 另外一篇文章也是這樣說的,哈哈。 Nacos作為Spring 推薦的分布式調(diào)度系統(tǒng)其也具備配置中心的功能, 我們也可以利用其作為配置中心,其client端主動定時發(fā)起與配置中心同步機(jī)制,實現(xiàn)動態(tài)配置的的更新。
環(huán)境依賴:
| 名稱 | 值 |
|---|---|
| JDK | 1.8 |
| Consul | 1.5.2 |
| SpringCloud | Greenwich.SR1 |
| Nacos | 1.1.0 |
二、項目實戰(zhàn)
1) pom依賴(主要)
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
<spring-cloud-alibaba.version>0.9.0.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencyManagement>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2)配置文件
application.properties #0表示服務(wù)器隨機(jī)端口 server.port=8090 #本次演示的kv的默認(rèn)值(老板默認(rèn)給你0元) company.pay.money=0
bootstrap.properties
#服務(wù)名稱 spring.application.name=waiter-service #consul 地址 spring.cloud.consul.host=localhost #consul 端口 spring.cloud.consul.port=8500 spring.cloud.consul.discovery.prefer-ip-address=true #nacos config server 地址 spring.cloud.nacos.config.server-addr=127.0.0.1:8848 #nacos 配置中心功能,默認(rèn)true spring.cloud.nacos.config.enabled=true #nacos config server 動態(tài)配置文件格式 spring.cloud.nacos.config.file-extension=yaml
3)動態(tài)參數(shù)接收類
@ConfigurationProperties("company.pay")
@RefreshScope
@Data
@Component
public class PayMoneyProperties {
//key結(jié)尾部分,以小數(shù)點(diǎn)為間隔
Integer money ;
}
備注:
- ConfigurationProperties 表示這個類關(guān)聯(lián)動態(tài)配置,“company.pay”表示key的前綴部分。
- @RefreshScope 表示動態(tài)刷新config server 值
- @Component 表示將該類加載到IOC容器中
在實戰(zhàn)中嘗試用@Value的方式獲取動態(tài),只能實現(xiàn)服務(wù)重啟后獲取動態(tài)的config server 的值
4)對外接口(便于直觀驗證)
方式一:
@RestController
@RequestMapping("nacos)
public class NacosConfigController {
@Autowired
private PayMoneyProperties payMoneyProperties ;
@RequestMapping("/pay/money")
public Object getConfig(HttpRequest request){
String money ="項目順利上線,老板開始發(fā)獎金:";
return money + payMoneyProperties.getMoney();
}
}
方式二:
@RestController
@RequestMapping("nacos")
//啟用動態(tài)配置刷新
@RefreshScope
public class NacosConfigController {
//獲取配置的值
@Value("${company.pay.money}")
private String moneyConfig;
@RequestMapping("/pay/money")
public Object getZkConfig(HttpRequest request){
String money ="項目順利上線,老板開始發(fā)獎金:";
return money +moneyConfig;
}
}
5)啟動項目

上圖可以通過日志看出config server 的連接信息,默認(rèn)拉取nacos上 項目名稱.yaml 為Data ID 的文件。
6)nacos config server 還沒設(shè)置對應(yīng)節(jié)點(diǎn)值時演示(獲取的是本地配置文件值)

備注:Spring boot 在加載配置順序:本地配置文件 --> Config Server -->application
7) nacos 中創(chuàng)建數(shù)據(jù)節(jié)點(diǎn)
請求地址:http://localhost:8848/nacos
創(chuàng)建數(shù)據(jù):Data ID:waiter-service.yaml

注意:YAML數(shù)據(jù)中,通過空格、“:” 表示數(shù)據(jù)層級關(guān)系, 在設(shè)置這個值前,可以在網(wǎng)上校驗一下YAML內(nèi)容的有效性;
8)驗證項目里是有有收到動態(tài)配置
如下圖,表示已經(jīng)通知到項目更新的值

在驗證接口中請求一下對應(yīng)接口,發(fā)現(xiàn)值已經(jīng)和nacos config server 中動態(tài)設(shè)置的值相同了

三、總結(jié)
1)nacos作為注冊中心相比 consul 、zookeeper 作為注冊中心,有了更友好的web頁面,支持監(jiān)聽節(jié)點(diǎn)信息查詢、配置歷史版本查詢、修改對比 等功能
2)client 會定時拉取nacos config server 值,與本地值對比
相關(guān)文章
Spring Boot詳解創(chuàng)建和運(yùn)行基礎(chǔ)流程
這篇文章主要介紹了SpringBoot創(chuàng)建和運(yùn)行的基礎(chǔ)流程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
Intellij IDEA 旗艦版創(chuàng)建 Spring MVC 項目踩過的坑
IDEA旗艦版可以直接創(chuàng)建Spring MVC項目,但創(chuàng)建后的項目并不是直接就可以運(yùn)行,還需要進(jìn)行一些配置。這篇文章主要介紹了Intellij IDEA 旗艦版創(chuàng)建 Spring MVC 項目踩坑記 ,需要的朋友可以參考下2020-03-03
Eclipse中安裝反編譯工具Fernflower的方法(Enhanced Class Decompiler)
這篇文章主要介紹了Eclipse中安裝反編譯工具Fernflower的方法(Enhanced Class Decompiler),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
詳解Java?redis中緩存穿透?緩存擊穿?雪崩三種現(xiàn)象以及解決方法
緩存穿透是指緩存和數(shù)據(jù)庫中都沒有的數(shù)據(jù),而用戶不斷發(fā)起請求,如發(fā)起為id為“-1”的數(shù)據(jù)或id為特別大不存在的數(shù)據(jù)。這時的用戶很可能是攻擊者,攻擊會導(dǎo)致數(shù)據(jù)庫壓力過大2022-01-01
Spring Boot + Mybatis-Plus實現(xiàn)多數(shù)據(jù)源的方法
這篇文章主要介紹了Spring Boot + Mybatis-Plus實現(xiàn)多數(shù)據(jù)源的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11
Springboot接入MyBatisPlus的實現(xiàn)
最近web端比較熱門的框架就是SpringBoot和Mybatis-Plus,這里簡單總結(jié)集成用法,具有一定的參考價值,感興趣的可以了解一下2023-09-09

