SpringCloudAlibaba Nacos配置中心
在java代碼中或者在配置文件中寫配置,是最不雅的,意味著每次修改配置都需要重新打包或者替換class文件。若放在遠(yuǎn)程的配置文件中,每次修改了配置后只需要重啟一次服務(wù)即可。話不多說,直接干貨拉滿。
集成nacos配置中心
首先引入配置相關(guān)的依賴
<!--Nacos 配置中心依賴-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--bootstrap的依賴,由于SpringCloud2020版本上bootstrap被默認(rèn)禁用了所以要引入才能使用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
其次保證項目啟動時,配置先從nacos配置中心獲取,所以配置都寫在bootstrap.yml
或bootstrap.properties
中即可。bootstrap的文件比application的優(yōu)先級要高。配置詳情如下:
server:
port: 9001
spring:
application:
name: consumer # 應(yīng)用名
cloud:
nacos:
discovery:
server-addr: localhost:8848 # nacos服務(wù)地址
config:
server-addr: localhost:8848 # nacos地址
file-extension: yml # 指定配置內(nèi)容的數(shù)據(jù)格式
nacos中的DataId配置
DataId主要是使當(dāng)前項目快速進行多套配置內(nèi)容的切換,看看DataId的組成格式:
${prefix}-${spring.profiles.active}.${file-extension}
- prefix:項目的服務(wù)名,也就是spirng.application.name的值
- spring.profiles.active:當(dāng)前的環(huán)境
- file-extension:文件后綴
當(dāng)spring.profiles.active為空時,對應(yīng)的’-'連接符也將會不存在,DataId的格式就是變換為${prefix}.${file-extension}
設(shè)置profiles為dev
server:
port: 9001
spring:
application:
name: consumer # 應(yīng)用名
cloud:
nacos:
discovery:
server-addr: localhost:8848 # nacos服務(wù)地址
config:
server-addr: localhost:8848 # nacos地址
file-extension: yml # 指定配置內(nèi)容的數(shù)據(jù)格式
profiles:
active: dev
那么我們的文件名就應(yīng)該為consumer-dev.yml
,我們需要在nacos上創(chuàng)建配置,先創(chuàng)建consumer-dev.yml和consumer-prod.yml文件
通過代碼獲取這個配置,然后通過調(diào)整環(huán)境,注意它們的配置返回。
@RestController// @RestController注解是@Controller+@ResponseBody
@RefreshScope //通過 Spring Cloud 原生注解 @RefreshScope 實現(xiàn)配置自動更新
public class ConfigController {
@Value("${custom.info}")// 注解獲取custom.info配置的值
private String config;
@RequestMapping("/getConfig")
public String getConfig() { // 獲取配置的接口
return config;
}
}
調(diào)用查看結(jié)果:
D:\springcloud\doc>curl localhost:9001/getConfig
nacos config dev
切換為prod環(huán)境,重啟項目再次調(diào)用
spring:
profiles:
active: prod
D:\springcloud\doc>curl localhost:9001/getConfig
nacos config prod
莫得問題~
Nacos的Group配置
group是分組的意思,表示配置內(nèi)容歸于哪個組,默認(rèn)的是DEFAULT_GROUP
組,如創(chuàng)建配置文件時聲明一個CONSUMER_GROUP
java代碼配置:
server:
port: 9001
spring:
application:
name: consumer # 應(yīng)用名
cloud:
nacos:
discovery:
server-addr: localhost:8848 # nacos服務(wù)地址
config:
server-addr: localhost:8848 # nacos地址
file-extension: yml # 指定配置內(nèi)容的數(shù)據(jù)格式
group: CONSUMER_GROUP # 指定某GROUP
profiles:
active: dev
重啟調(diào)用
D:\springcloud\doc>curl localhost:9001/getConfig
nacos config dev CONSUMER_GROUP
nacos的Namespace配置
namespace表示命名空間,比較粗粒度的控制。默認(rèn)的namespace是public,當(dāng)創(chuàng)建新的命名空間時,如果要指定此命名空間,則需要在java配置中聲明它的namespace的id值
如上圖創(chuàng)建了一個命名空間,在namespace中創(chuàng)建consumer-dev.yml的配置文件
在java配置中namespace是填寫的ID值而不是名稱
server:
port: 9001
spring:
application:
name: consumer # 應(yīng)用名
cloud:
nacos:
discovery:
server-addr: localhost:8848 # nacos服務(wù)地址
config:
server-addr: localhost:8848 # nacos地址
file-extension: yml # 指定配置內(nèi)容的數(shù)據(jù)格式
namespace: e6d5450d-a8d3-45c4-9801-091586082104 # 命名空間的id值
profiles:
active: dev
Nacos的持久化
Nacos默認(rèn)的是使用嵌入式數(shù)據(jù)庫Derby數(shù)據(jù)庫,也就表明越到后面越容易出現(xiàn)瓶頸,如存儲容量限制,不方便數(shù)據(jù)查詢、存儲優(yōu)化等等。Nacos支持使用mysql做數(shù)據(jù)持久化,版本要求mysql在5.6.5+
mysql數(shù)據(jù)持久化
在mysql中創(chuàng)建一個數(shù)據(jù)庫,并且導(dǎo)入nacos-mysql.sql的文件(路徑是/conf/nacos-mysql.sql)
在Nacos的conf/application.properties文件中添加mysql數(shù)據(jù)源支持
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql # 添加mysql數(shù)據(jù)源
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root # 數(shù)據(jù)庫賬號
db.password.0=123456 # 密碼
重啟下nacos,登錄進入后,發(fā)現(xiàn)我們剛剛測試的那些數(shù)據(jù)都不在了,這就是不做持久化的問題。
現(xiàn)在已經(jīng)將數(shù)據(jù)的持久化加上了,我們像剛剛一樣隨便添加幾個數(shù)據(jù),然后再次重啟nacos,看看數(shù)據(jù)有沒有丟失。
server:
port: 9001
spring:
application:
name: consumer # 應(yīng)用名
cloud:
nacos:
discovery:
server-addr: localhost:8848 # nacos服務(wù)地址
config:
server-addr: localhost:8848 # nacos地址
file-extension: yml # 指定配置內(nèi)容的數(shù)據(jù)格式
profiles:
active: dev
調(diào)試:
D:\springcloud\doc>curl localhost:9001/getConfig
nacos config dev
重啟nacos,可以看到我們的數(shù)據(jù)都還在
nacos的配置擴展
除了通過${prefix}-${spring.profiles.active}.${file-extension}
的方式指定我們的配置文件,我們還可以直接通過dataId配置指定nacos上的一些共享配置
如創(chuàng)建了一個redis的共享配置
在java項目中不僅要讀取consumer-dev.yml
還要讀取redis.yml的配置,可以使用extension-configs來聲明文章來源:http://www.zghlxwxcb.cn/news/detail-605161.html
server:
port: 9001
spring:
application:
name: consumer # 應(yīng)用名
cloud:
nacos:
discovery:
server-addr: localhost:8848 # nacos服務(wù)地址
config:
server-addr: localhost:8848 # nacos地址
file-extension: yml # 指定配置內(nèi)容的數(shù)據(jù)格式
extension-configs:
-
dataId: redis.yml
group: DEFAULT_GROUP
refresh: true
profiles:
active: dev
extension-configs是一個數(shù)組,extension-configs中若有多個配置時文章來源地址http://www.zghlxwxcb.cn/news/detail-605161.html
extension-configs:
-
dataId: redis.yml
group: DEFAULT_GROUP
refresh: true
-
dataId: rabbitmq.yml
group: DEFAULT_GROUP
refresh: true
到了這里,關(guān)于SpringCloudAlibaba微服務(wù)實戰(zhàn)系列(二)Nacos配置中心的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!