SpringCloud Alibaba是阿里巴巴致力于對(duì)微服務(wù)的管理、配置、注冊(cè)等一整套的解決方案。
簡(jiǎn)介
Nacos 提供用于存儲(chǔ)配置和其他元數(shù)據(jù)的 K-V 存儲(chǔ),為分布式系統(tǒng)中的外部化配置提供服務(wù)器端和客戶端支持。使用 Spring Cloud Alibaba Nacos Config,可以在 Nacos Server 集中管理你 Spring Cloud 應(yīng)用的外部屬性配置。
Nacos Config支持多種方式的配置格式,比如:TEXT、JSON、XML、YAML、HTML、PROPERTIES等。
我們本章先來(lái)看下是怎么讀取Properties類型的配置。
前提
本地需要安裝Nacos Server,具體安裝步驟訪問(wèn)Nacos官網(wǎng)文檔,Nacos Server 安裝
創(chuàng)建項(xiàng)目
使用idea工具創(chuàng)建一個(gè)SpringCloud項(xiàng)目。
添加依賴
添加依賴在pom.xml配置文件如下所示:
//...
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
<spring-cloud-alibaba.version>0.2.1.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--alibaba nacos config-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!--SpringCloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--SpringCloud Alibaba-->
<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>
</dependencies>
</dependencyManagement>
//...
bootstrap引導(dǎo)配置
Nacos Config相關(guān)的配置必須在bootstrap.yml或者bootstrap.properties文件內(nèi)添加。
配置內(nèi)容如下所示:
spring:
application:
name: alibaba-nacos-config-client
# nacos config
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
-
spring.application.name
spring-cloud-starter-alibaba-nacos-config依賴默認(rèn)會(huì)使用該值的內(nèi)容作為DATA-ID來(lái)匹配讀取Nacos Config,讀取規(guī)則下面介紹。 -
spring.cloud.nacos.config.server-addr
配置nacos server的地址信息,nacos server本地安裝訪問(wèn)Nacos Server 安裝
讀取Nacos配置
在啟動(dòng)類內(nèi)添加讀取Nacos Config部分代碼,為了跟下一步做鋪墊來(lái)測(cè)試自動(dòng)更新,我們間隔1秒后再次讀取配置內(nèi)容,編碼如下所示:
/**
* Nacos Config Properties方式
*
* @author:恒宇少年 - 于起宇
* <p>
* DateTime:2019-03-01 11:20
* Blog:http://blog.yuqiyu.com
* WebSite:http://www.itdecent.cn/u/092df3f77bca
* Gitee:https://gitee.com/hengboy
* GitHub:https://github.com/hengyuboy
*/
@SpringBootApplication
public class SpringCloudAlibabaNacosConfigPropertiesApplication {
/**
* logger instance
*/
static Logger logger = LoggerFactory.getLogger(SpringCloudAlibabaNacosConfigPropertiesApplication.class);
public static void main(String[] args) throws Exception {
ConfigurableApplicationContext applicationContext = SpringApplication.run(SpringCloudAlibabaNacosConfigPropertiesApplication.class, args);
while (true) {
//當(dāng)動(dòng)態(tài)配置刷新時(shí),會(huì)更新到 Enviroment中,因此這里每隔一秒中從Enviroment中獲取配置
String userName = applicationContext.getEnvironment().getProperty("hengboy.name");
String userAge = applicationContext.getEnvironment().getProperty("hengboy.age");
logger.info("配置信息,名稱:{},年齡:{}", userName, userAge);
TimeUnit.SECONDS.sleep(1);
}
}
}
測(cè)試
接下來(lái)我們來(lái)測(cè)試是否可以從Nacos Config內(nèi)讀取相關(guān)的配置信息,我們需要訪問(wèn)Nacos Console控制臺(tái)來(lái)添加配置信息。
訪問(wèn):Nacos Console,默認(rèn)用戶名/密碼為:nacos/nacos。
添加 Nacos Config
通過(guò)配置列表內(nèi)添加配置信息,添加時(shí)DATA-ID的組成部分為:{spring.application.name}.{file-extension}。
file-extension文件后綴名默認(rèn)為properties,如果需要修改,在bootstrap文件內(nèi)進(jìn)行修改配置spring.cloud.nacos.config.file-extension的值。
添加的配置信息如下所示:
DATA ID : alibaba-nacos-config-client.properties
Group : DEFAULT_GROUP
配置內(nèi)容 :
hengboy.name=admin-properties
hengboy.age=11
輸出 Nacos Config
一切就緒,我們通過(guò)Application方式啟動(dòng)項(xiàng)目,查看控制臺(tái)打印內(nèi)容如下所示:
Loading nacos data, dataId: 'alibaba-nacos-config-client.properties', group: 'DEFAULT_GROUP'
Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='alibaba-nacos-config-client.properties'}]}
配置信息,名稱:admin-properties,年齡:11
自動(dòng)更新配置
在上面的步驟中我們已經(jīng)可以從Nacos Config內(nèi)讀取到對(duì)應(yīng)的properties配置文件內(nèi)容信息。
那我們?nèi)绻ㄟ^(guò)Nacos Console進(jìn)行修改了配置內(nèi)容后,我們的應(yīng)用程序是不是可以立馬獲取到修改后的值呢?
我們帶著這個(gè)疑問(wèn),去Nacos Console找到DATA-ID = alibaba-nacos-config-client.properties的配置信息,修改hengboy.age的值為25,重新發(fā)布配置信息后查看我們的應(yīng)用程序的控制臺(tái)輸出內(nèi)容如下所示:
Loading nacos data, dataId: 'alibaba-nacos-config-client.properties', group: 'DEFAULT_GROUP'
Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='alibaba-nacos-config-client.properties'}]}
Refresh keys changed: [hengboy.age]
配置信息,名稱:admin-properties,年齡:25
可以看到輸出的內(nèi)容,我們修改完外部的配置信息后,Nacos Client會(huì)自動(dòng)刷新所修改的配置文件內(nèi)容,始終讓配置內(nèi)容保持與Nacos Config內(nèi)配置一致。
我們通過(guò)Nacos Console修改的當(dāng)前DATA-ID下的任何參數(shù)都會(huì)在控制臺(tái)Refresh keys changed: [xxx,xxx]打印。
總結(jié)
本章簡(jiǎn)單的講解了SpringCloud Alibaba的配置中心讀取配置信息方式以及自動(dòng)更新配置信息實(shí)現(xiàn),在開(kāi)頭我們說(shuō)了Nacos Config所支持的配置文件的格式不僅僅是properties這一種,不過(guò)這是默認(rèn)的一種方式,在下一章我們來(lái)講解下YAML方式的配置信息讀取。
源碼位置
- SpringCloud Alibaba 整套源碼:https://gitee.com/hengboy/spring-cloud-chapter
- 點(diǎn)擊查看本章源碼