<!-- 添加Nacos Config配置項 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- 讀取bootstrap文件 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
第一個依賴項是 Nacos 配置中心的依賴包。盡管我們在第 9 節課中已經在 customer 服務中添加過了 Nacos 的依賴項,但此依賴項非彼依賴項,初學者很容易搞混。Nacos 既能用作配置管理也能用作服務注冊,如果你想要引入 Nacos 的服務發現功能,需要添加的是 nacos-discovery 包;而如果你想引入的是 Nacos 的配置管理功能,則需要添加 nacos-config 包。第二個依賴項是為了讓程序在啟動時能夠加載本地的 bootstrap 配置文件,因為 Nacos 配置中心的連接信息需要配置在 bootstrap 文件,而非 application.yml 文件中。在 Spring Cloud 2020.0.0 版本之后,bootstrap 文件不會被自動加載,你需要主動添加 spring-cloud-starter-bootstrap 依賴項,來開啟 bootstrap 的自動加載流程。為什么集成 Nacos 配置中心必須用到 bootstrap 配置文件呢?這就要說到 Nacos Config 在項目啟動過程中的優先級了。如果你在 Nacos 配置中心里存放了訪問 MySQL 數據庫的 URL、用戶名和密碼,而這些數據庫配置會被用於其它組件的初始化流程,比如數據庫連接池的創建。為了保證應用能夠正常啟動,我們必須在其它組件初始化之前從 Nacos 讀到所有配置項,之后再將獲取到的配置項用於后續的初始化流程。因此,在服務的啟動階段,你需要通過某種途徑將 Nacos 配置項加載的優先級設置為最高。而在 Spring Boot 規范中,bootstrap 文件通常被用於應用程序的上下文引導,bootstrap.yml 文件的加載優先級是高於 application.yml 的。如果我們將 Nacos Config 的連接串和參數添加到 bootstrap 文件中,就能確保程序在啟動階段優先執行 Nacos Config 遠程配置項的讀取任務。這就是我們必須將 Nacos Config 連接串配置在 bootstrap 中的原因。依賴項添加完成之后,我們就可以去配置 Nacos Config 的連接串了。
別忘了在 CouponCustomerController 類頭上添加一個 RefreshScope 注解,有了這個注解,Nacos Config 中的屬性變動就會動態同步到當前類的變量中。如果不添加 RefreshScope 注解,即便應用程序監聽到了外部屬性變更,那么類變量的值也不會被刷新。
@RefreshScope
public class CouponCustomerController {
}