SpringCloud Alibaba
是
阿裡巴巴
緻力于對
微服務
的
管理
、
配置
注冊
等一整套的解決方案。
簡介
Nacos
提供用于存儲配置和其他中繼資料的
K-V
存儲,為分布式系統中的外部化配置提供伺服器端和用戶端支援。使用 Spring Cloud Alibaba Nacos Config,可以在 Nacos Server 集中管理你 Spring Cloud 應用的外部屬性配置。
Nacos Config
支援多種方式的配置格式,比如:
TEXT
JSON
XML
YAML
HTML
PROPERTIES
等。
我們本章先來看下是怎麼讀取
Properties
類型的配置。
前提
本地需要安裝
Nacos Server
,具體安裝步驟通路
Nacos
官網文檔,
Nacos Server 安裝建立項目
使用
idea
工具建立一個
SpringCloud
項目。
添加依賴
添加依賴在
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引導配置
Nacos Config
相關的配置必須在
bootstrap.yml
或者
bootstrap.properties
檔案内添加。
配置内容如下所示:
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
來比對讀取DATA-ID
,讀取規則下面介紹。Nacos Config
-
配置spring.cloud.nacos.config.server-addr
的位址資訊,nacos server
本地安裝通路nacos server
讀取Nacos配置
在啟動類内添加讀取
Nacos Config
部分代碼,為了跟下一步做鋪墊來測試自動更新,我們間隔
1秒
後再次讀取配置内容,編碼如下所示:
/**
* Nacos Config Properties方式
*
* @author:恒宇少年 - 于起宇
* <p>
* DateTime:2019-03-01 11:20
* Blog:http://blog.yuqiyu.com
* WebSite:http://www.jianshu.com/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) {
//當動态配置重新整理時,會更新到 Enviroment中,是以這裡每隔一秒中從Enviroment中擷取配置
String userName = applicationContext.getEnvironment().getProperty("hengboy.name");
String userAge = applicationContext.getEnvironment().getProperty("hengboy.age");
logger.info("配置資訊,名稱:{},年齡:{}", userName, userAge);
TimeUnit.SECONDS.sleep(1);
}
}
}
測試
接下來我們來測試是否可以從
Nacos Config
内讀取相關的配置資訊,我們需要通路
Nacos Console
控制台來添加配置資訊。
通路:
Nacos Console,預設
使用者名/密碼
為:
nacos/nacos
。
添加 Nacos Config
通過
配置清單
内添加配置資訊,添加時
DATA-ID
的組成部分為:
{spring.application.name}.{file-extension}
file-extension
檔案字尾名預設為
properties
,如果需要修改,在
bootstrap
檔案内進行修改配置
spring.cloud.nacos.config.file-extension
的值。
添加的配置資訊如下所示:
DATA ID : alibaba-nacos-config-client.properties
Group : DEFAULT_GROUP
配置内容 :
hengboy.name=admin-properties
hengboy.age=11
輸出 Nacos Config
一切就緒,我們通過
Application
方式啟動項目,檢視控制台列印内容如下所示:
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
自動更新配置
在上面的步驟中我們已經可以從
Nacos Config
内讀取到對應的
properties
配置檔案内容資訊。
那我們如果通過
Nacos Console
進行修改了配置内容後,我們的應用程式是不是可以立馬擷取到修改後的值呢?
我們帶着這個疑問,去
Nacos Console
找到
DATA-ID = alibaba-nacos-config-client.properties
的配置資訊,修改
hengboy.age
的值為
25
,重新釋出配置資訊後檢視我們的應用程式的控制台輸出内容如下所示:
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
可以看到輸出的内容,我們修改完
外部的配置資訊
後,
Nacos Client
會自動重新整理所修改的配置檔案内容,始終讓配置内容保持與
Nacos Config
内配置一緻。
我們通過
Nacos Console
修改的目前
DATA-ID
下的任何參數都會在控制台
Refresh keys changed: [xxx,xxx]
列印。
總結
本章簡單的講解了
SpringCloud Alibaba
的配置中心
讀取配置資訊方式
以及
自動更新配置資訊
實作,在開頭我們說了
Nacos Config
所支援的配置檔案的格式不僅僅是
properties
這一種,不過這是預設的一種方式,在下一章我們來講解下
YAML
方式的配置資訊讀取。
源碼位置
- SpringCloud Alibaba 整套源碼: https://gitee.com/hengboy/spring-cloud-chapter
- 點選檢視本章源碼
開源資訊
-
MicroJob
micro-job是一款分布式任務排程執行架構,用于叢集環境負載均衡條件下的任務分發以及任務消費
任務消費者節點定義任務 & 任務自動上報
任務排程器自動根據負載均衡政策來選擇不同的消費者節點進行任務消費
[點選檢視MicroJob官方文檔](http://job.yuqiyu.com/#/)