目錄:Spring Cloud Alibaba 教程
上一篇:10.Spring Cloud Alibaba 網(wǎng)關(guān)全局過濾
下一篇:12.Spring Cloud Alibaba 鏈路追蹤
Nacos Config 服務(wù)端初始化
分布式配置中心
在分布式系統(tǒng)中,由于服務(wù)數(shù)量巨多绒瘦,為了方便服務(wù)配置文件統(tǒng)一管理蝶溶,實時更新哈打,所以需要分布式配置中心組件。
Nacos Config
Nacos 提供用于存儲配置和其他元數(shù)據(jù)的 key/value 存儲驹愚,為分布式系統(tǒng)中的外部化配置提供服務(wù)器端和客戶端支持姻采。使用 Spring Cloud Alibaba Nacos Config近尚,您可以在 Nacos Server 集中管理你 Spring Cloud 應(yīng)用的外部屬性配置。
Spring Cloud Alibaba Nacos Config 是 Spring Cloud Config Server 和 Client 的替代方案鸡岗,客戶端和服務(wù)器上的概念與 Spring Environment 和 PropertySource 有著一致的抽象剖淀,在特殊的 bootstrap 階段,配置被加載到 Spring 環(huán)境中纤房。當(dāng)應(yīng)用程序通過部署管道從開發(fā)到測試再到生產(chǎn)時纵隔,您可以管理這些環(huán)境之間的配置,并確保應(yīng)用程序具有遷移時需要運行的所有內(nèi)容。
創(chuàng)建配置文件
需要在 Nacos Server 中創(chuàng)建配置文件捌刮,我們依然采用 YAML 的方式部署配置文件碰煌,操作流程如下:
- 瀏覽器打開
http://localhost:8848/nacos
,訪問 Nacos Server
- 新建配置文件绅作,此處我們以之前創(chuàng)建的 服務(wù)提供者 項目為例
注意:Data ID 的默認(rèn)擴(kuò)展名為 .properties
芦圾,希望使用 YAML 配置,此處必須指明是 .yaml
- 發(fā)布成功后在 “配置列表” 一欄即可看到剛才創(chuàng)建的配置項
Nacos Config 客戶端的使用
POM
此處我們以之前創(chuàng)建的 服務(wù)提供者 項目為例
在 pom.xml
中增加 org.springframework.cloud:spring-cloud-starter-alibaba-nacos-config
依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
完整的 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>
<groupId>com.wsl</groupId>
<artifactId>hello-spring-cloud-alibaba-dependencies</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../hello-spring-cloud-alibaba-dependencies/pom.xml</relativePath>
</parent>
<artifactId>hello-spring-cloud-alibaba-nacos-provider</artifactId>
<packaging>jar</packaging>
<name>hello-spring-cloud-alibaba-nacos-provider</name>
<dependencies>
<!-- Spring Boot Begin -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Spring Boot End -->
<!-- Spring Cloud Begin -->
<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>
<!-- Spring Cloud End -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.wsl.hello.provider.NacosProviderApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
bootstrap.properties
創(chuàng)建名為 bootstrap.properties
的配置文件并刪除之前創(chuàng)建的 application.yml
配置文件俄认,由于已經(jīng)在服務(wù)端配置个少,此處不再贅述
# 這里的應(yīng)用名對應(yīng) Nacos Config 中的 Data ID,實際應(yīng)用名稱以配置中心的配置為準(zhǔn)
spring.application.name=nacos-provider-config
# 指定查找名為 nacos-provider-config.yaml 的配置文件
spring.cloud.nacos.config.file-extension=yaml
# Nacos Server 的地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
注意:在之前的 Spring Cloud Netflix 課程中有提到過 Spring Boot 配置文件的加載順序眯杏,依次為 bootstrap.properties
-> bootstrap.yml
-> application.properties
-> application.yml
夜焦,其中 bootstrap.properties
配置為最高優(yōu)先級
啟動應(yīng)用程序
啟動應(yīng)用后我們可以通過日志看到,已經(jīng)成功加載到了配置文件
配置的動態(tài)更新
Nacos Config 也支持配置的動態(tài)更新岂贩,操作流程如下:
- 修改服務(wù)端配置茫经,增加一個
user.name
的屬性
- 修改 Controller ,增加一個請求方法萎津,測試配置更新效果
// 注入配置文件上下文
@Autowired
private ConfigurableApplicationContext applicationContext;
// 從上下文中讀取配置
@GetMapping(value = "/hi")
public String sayHi() {
return "Hello " + applicationContext.getEnvironment().getProperty("user.name");
}
- 通過瀏覽器訪問該接口卸伞,瀏覽器顯示
Hello wangshilin
-
修改服務(wù)端配置
此時觀察控制臺日志,你會發(fā)現(xiàn)我們已經(jīng)成功刷新了配置
- 刷新瀏覽器锉屈,瀏覽器顯示
Hello wangshilin1
注意:你可以使用 spring.cloud.nacos.config.refresh.enabled=false
來關(guān)閉動態(tài)刷新
Nacos Config 多環(huán)境的配置
Spring Boot Profile
我們在做項目開發(fā)的時候荤傲,生產(chǎn)環(huán)境和測試環(huán)境的一些配置可能會不一樣,有時候一些功能也可能會不一樣颈渊,所以我們可能會在上線的時候手工修改這些配置信息遂黍。但是 Spring 中為我們提供了 Profile 這個功能。我們只需要在啟動的時候添加一個虛擬機(jī)參數(shù)儡炼,激活自己環(huán)境所要用的 Profile 就可以了妓湘。
操作起來很簡單,只需要為不同的環(huán)境編寫專門的配置文件乌询,如:application-dev.yml
榜贴、application-prod.yml
, 啟動項目時只需要增加一個命令參數(shù) --spring.profiles.active=環(huán)境配置
即可妹田,啟動命令如下:
java -jar hello-spring-cloud-alibaba-nacos-provider-1.0.0-SNAPSHOT.jar --spring.profiles.active=prod
Nacos Config Profile
spring-cloud-starter-alibaba-nacos-config 在加載配置的時候唬党,不僅僅加載了以 dataid 為 ${spring.application.name}.${file-extension:properties}
為前綴的基礎(chǔ)配置,還加載了 dataid 為 ${spring.application.name}-${profile}.${file-extension:properties}
的基礎(chǔ)配置鬼佣。在日常開發(fā)中如果遇到多套環(huán)境下的不同配置驶拱,可以通過 Spring 提供的 ${spring.profiles.active}
這個配置項來配置。
此處我們以之前創(chuàng)建的 服務(wù)提供者 項目為例
在 Nacos Server 中增加配置
增加一個名為 nacos-provider-config-prod.yaml
的配置
注意:此時晶衷,我將配置文件中的端口由 8081
-> 8082
在項目中增加配置
增加一個名為 bootstrap-prod.properties
的配置文件蓝纲,內(nèi)容如下:
spring.profiles.active=prod
spring.application.name=nacos-provider-config
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
主要增加了 spring.profiles.active=prod
配置阴孟,用于指定訪問 Nacos Server 中的 nacos-provider-config-prod.yaml
配置
啟動應(yīng)用程序
此時我們有兩個配置文件,分別為 bootstrap.properties
和 bootstrap-prod.properties
税迷,我們需要指定啟動時加載哪一個配置文件永丝,操作流程如下:
-
Run
->Edit Configurations..
-
設(shè)置需要激活的配置
-
觀察日志,判斷是否成功加載配置