前言:Nacos 是什么?
Nacos(Naming and Configuration Service)是阿里巴巴開源的一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺。我們可以使用它:
?作為注冊中心(服務發現)
?作為配置中心(集中化配置管理)
本篇重點講 Nacos 作為配置中心 的使用。
一、什么是 Nacos 配置中心?🧠
Nacos(Dynamic Naming and Configuration Service) 是阿里開源的服務注冊與配置管理中心。
作為配置中心,Nacos 提供了:? 配置中心的核心作用:
傳統配置文件(本地) Nacos(集中式配置) 配置分散、手動部署 配置集中、統一管理 修改后需重啟服務 支持熱更新 無法區分環境/服務 支持命名空間、分組 不利于運維、灰度 更適合動態配置、灰度發布 ? 使用 Nacos 的優勢:
📦 集中管理:所有微服務的配置集中托管在 Nacos 中。
🔄 動態刷新:配置修改后可動態生效,無需重啟服務。
🌍 環境隔離:通過命名空間劃分 dev/test/prod 等環境。
🧩 擴展靈活:支持配置共享、多文件加載、灰度發布等。
二、Nacos 配置中心使用流程 🚀
以下以 Spring Boot + Spring Cloud Alibaba 項目為例,詳細介紹從依賴引入到動態刷新配置。
三、Nacos 配置使用詳解 🛠?
1?? 引入依賴(Maven)
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>0.2.2.RELEASE</version> <!-- 請根據 Spring Cloud 版本選擇 --> </dependency>
若你同時使用注冊中心:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>0.2.2.RELEASE</version> <!-- 請根據 Spring Cloud 版本選擇 --> </dependency>
2?? 編寫
bootstrap.yml
(必須)🚨 必須用
bootstrap.yml
,因為 Spring 會在加載application.yml
之前讀取它,才能初始化 Nacos 配置。spring:application: //spring.application.name 是應用名,spring.cloud.nacos.config.name 是配置文件的前綴。 //Nacos 默認會用 application.name 來當 config.name,除非你手動寫了config.namename: nacos-config-demo # 會作為 dataId 的前綴profiles:active: dev # 表示讀取 nacos-config-demo-dev.yamlcloud:nacos:config:server-addr: 127.0.0.1:8848file-extension: yaml # 支持 yaml/propertiesnamespace: public # 或使用 UUID(非默認空間)group: DEFAULT_GROUPrefresh-enabled: true
? 最終讀取的配置文件 dataId 是:
nacos-config-demo-dev.yaml
3?? Nacos 控制臺添加配置 ??
進入 http://localhost:8848:
Data ID:
nacos-config-demo-dev.yaml
Group:
DEFAULT_GROUP
配置格式:
YAML
配置內容示例:
user:name: Aliceage: 30
4?? 編寫配置綁定類(推薦方式)
@Configuration @ConfigurationProperties(prefix = "user") // 自動綁定配置 public class UserConfig {private String name;private Integer age;// Getter & Setter }
?? 開啟配置綁定支持(可省略)
@SpringBootApplication @EnableConfigurationProperties public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);} }
5?? 控制器中使用配置 + 動態刷新
若希望修改配置后立即生效,需添加
@RefreshScope
注解。@RefreshScope 背后做了啥
@RestController @RefreshScope public class UserController {@Autowiredprivate UserConfig userConfig;@GetMapping("/user")public String getUser() {return userConfig.getName() + " - " + userConfig.getAge();} }
四、拓展配置項(多個配置文件)
spring:cloud:nacos:config:extension-configs:- data-id: db-config.yamlgroup: DEFAULT_GROUPrefresh: true- data-id: common.yamlgroup: DEFAULT_GROUPrefresh: true
默認主配置是:
nacos-config-demo-dev.yaml
可以引入多個擴展配置
支持刷新(
refresh: true
)
五、命名空間的使用(多環境隔離)
可在 Nacos 控制臺創建多個 namespace 來區分環境:
環境 Namespace ID 說明 開發環境 dev-id
開發使用 測試環境 test-id
測試使用 生產環境 prod-id
正式使用 配置方式:
spring:cloud:nacos:config:namespace: dev-id
六、配置優先級(從高到低)
nacos-config-demo-dev.yaml
(主配置)
extension-configs
中的多個配置
shared-configs
(共享配置,可用于多個服務通用)
七、常見問題與排查 🔍
問題 可能原因 解決方式 配置讀不到 文件名或 profile 錯 確認 dataId 命名是否正確 無法動態刷新 缺少 @RefreshScope
加在 Controller 或 Config 類上 只使用 @Value 失敗 @Value 不支持批量刷新 用 @ConfigurationProperties
不生效 寫在 application.yml 中了 必須寫在 bootstrap.yml
八、項目結構示例 🧱
src ├── main │ ├── java │ │ └── com.example.demo │ │ ├── config/UserConfig.java │ │ └── controller/UserController.java │ └── resources │ ├── bootstrap.yml ? 必須 │ └── application.yml
九、結語 🧩
Nacos 配置中心是微服務配置管理的利器:
初學階段建議:單環境單配置文件 先跑通再拓展
熟悉后可用:多命名空間 + 多配置文件 + 動態刷新 + 加密配置