# SpringCloud-Alibaba **Repository Path**: wangfugui-ma/spring-cloud-alibaba ## Basic Information - **Project Name**: SpringCloud-Alibaba - **Description**: SpringCloud-Alibaba组件demo - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 1 - **Created**: 2023-03-14 - **Last Updated**: 2025-02-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: SpringCloud, 阿里巴巴, 微服务 ## README > Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。 > Spring Cloud Alibaba Nacos Config 是 Config Server 和 Client 的替代方案,客户端和服务器上的概念与 Spring Environment 和 PropertySource 有着一致的抽象,在特殊的 bootstrap 阶段,配置被加载到 Spring 环境中。当应用程序从开发到测试再到生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。 > 引用:[ https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config](https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config) **文中对应的代码可查看**:[ https://gitee.com/WangFuGui-Ma/spring-cloud-alibaba/tree/master/nacos/config](https://gitee.com/WangFuGui-Ma/spring-cloud-alibaba/tree/master/nacos/config) ## 🐍第一步,创建配置文件到nacos中 在nacos的配置管理页面创建如下图所示的配置 ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4c99279a424c4257bf64d156c3861e70~tplv-k3u1fbpfcp-zoom-1.image) ## 🐍第二步,在项目中配置nacos的地址和指定文件 **必须使用 bootstrap.properties 配置文件来配置Nacos Server 地址** spring.application.name 和 nacos中的dataid相对应 ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/294e25bee5644685bc60e848a52c6872~tplv-k3u1fbpfcp-zoom-1.image) spring.cloud.nacos.config.server-addr填写自己本机的nacos地址 ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5fdc73a4d0864936919d05c620f7b334~tplv-k3u1fbpfcp-zoom-1.image) ## 🐍第三步,读取配置文件 ```java @SpringBootApplication public class NacosConfigApplication { public static void main(String[] args) { ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args); String useLocalCache = applicationContext.getEnvironment().getProperty("useLocalCache"); System.err.println("useLocalCache :"+useLocalCache); } } ``` 在我们的springboot启动内中读取我们的配置文件 ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/dfe6652c1e5d449e9c2adaddd876f8e7~tplv-k3u1fbpfcp-zoom-1.image) 启动,就可以读取到了 ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e00ac212681c4045b75750c1cad8ff0a~tplv-k3u1fbpfcp-zoom-1.image) ## 🐦高阶用法 ### 🐦高阶用法一:使用yaml文件 #### 🐦第一步,nacos创建nacos-config.yml文件,配置如下![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6b164f588a5b4ee4a42110d43f64cff1~tplv-k3u1fbpfcp-zoom-1.image) #### 🐦第二步,修改项目配置文件如下 ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/aa0f669742694957a842f5479f109d48~tplv-k3u1fbpfcp-zoom-1.image) **bootstrap.yml** ```yml spring: application: name: nacos-config # appName 会自动读取nacos中dataid为nacos-config.yml的文件 cloud: nacos: config: server-addr: 127.0.0.1:8848 file-extension: yml ``` file-extension:文件名的后缀 #### 🐦第三步,读取 ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/437dab0dbf7744c88a3d1ee81b705a64~tplv-k3u1fbpfcp-zoom-1.image) ### 🐼高阶用法二:使用业务类读取配置 ```java import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/config") @RefreshScope public class ConfigController { @Value("${useLocalCache:false}") private boolean useLocalCache; /** * http://localhost:8080/config/get */ @RequestMapping("/get") public boolean get() { return useLocalCache; } } ``` ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1b3d57fc063044dabaced0b4393a77c9~tplv-k3u1fbpfcp-zoom-1.image) postman测试 ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3ed3db2692c3433494480d99387c1efe~tplv-k3u1fbpfcp-zoom-1.image) ### 🐘高阶用法三:动态刷新配置 修改nacos配置 ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c0385fd0a1c44ac0a95074f7eeb135a1~tplv-k3u1fbpfcp-zoom-1.image) 启动类修改为 ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import java.util.concurrent.TimeUnit; /** * Document: https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html */ @SpringBootApplication public class NacosConfigApplication { public static void main(String[] args) throws InterruptedException { ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args); while(true) { String useLocalCache = applicationContext.getEnvironment().getProperty("useLocalCache"); System.err.println("useLocalCache :" + useLocalCache); TimeUnit.SECONDS.sleep(1); } } } ``` 修改之后成功获取 ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/38b230c8733349958259cd2f1b9fadcd~tplv-k3u1fbpfcp-zoom-1.image) 业务类上面可以加注解`@RefreshScope`开启刷新配置 ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4791a526ec9d423ca1ce0c680073810e~tplv-k3u1fbpfcp-zoom-1.image) ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2f3a2acdb8144a0d81ac09a19f08a16f~tplv-k3u1fbpfcp-zoom-1.image) ### 🐑高阶用法四:使用相同的配置文件 使用情况:很多系统共用一个配置文件 #### 🐑第一步:替换jar包 ```java org.springframework.cloud spring-cloud-starter-alibaba-nacos-config 0.2.1.RELEASE ``` 替换为 ```java com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config 2.2.3.RELEASE ``` ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/68006d5e5fc54f0e875a6d4fc0ae5488~tplv-k3u1fbpfcp-zoom-1.image) #### 🐑第二步:nacos创建common.yml文件 ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4aed59ba6a294c9183fbcc37f9661edf~tplv-k3u1fbpfcp-zoom-1.image) #### 🐑第三步,项目配置文件配置 ```yml spring: application: name: nacos-config # appName 会自动读取nacos中dataid为nacos-config.yml的文件 cloud: nacos: config: server-addr: 127.0.0.1:8848 file-extension: yml #文件后缀名 shared-configs: - common.${spring.cloud.nacos.config.file-extension} ``` shared-configs:共用的文件 #### 🐑第四步,启动类读取配置 ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import java.util.concurrent.TimeUnit; /** * Document: https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html */ @SpringBootApplication public class NacosConfigApplication { public static void main(String[] args) throws InterruptedException { ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args); while(true) { String useLocalCache = applicationContext.getEnvironment().getProperty("useLocalCache"); String common = applicationContext.getEnvironment().getProperty("common"); System.err.println("useLocalCache :" + useLocalCache); System.err.println("common :" + common); TimeUnit.SECONDS.sleep(1); } } } ``` ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c75ec3290fdb4c8caf4f9303a2d737c9~tplv-k3u1fbpfcp-zoom-1.image) ### 🐫高阶用法五: 自定义命名空间(namespace) nacos默认读取的是public ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8b75679673614973b3913a4111d1bb70~tplv-k3u1fbpfcp-zoom-1.image) 我们要用到test环境 #### 🐫第一步,创建test命名空间 ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2daf83aef5a142b3bbd3f17d95ff01fc~tplv-k3u1fbpfcp-zoom-1.image) 复制命名空间id `4c9c23a2-0300-4c72-b07f-7846bd03e153` ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9afd1f72b6334e4687baa2ac21014047~tplv-k3u1fbpfcp-zoom-1.image) 第二步,命名空间里面新建配置文件 ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/dd943c8a560045aca8e1ec2f74f04424~tplv-k3u1fbpfcp-zoom-1.image) ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/45d86590092546d39685b84041aa9bbe~tplv-k3u1fbpfcp-zoom-1.image) #### 🐫第三步,项目配置命名空间 ```yml spring: application: name: nacos-config # appName 会自动读取nacos中dataid为nacos-config.yml的文件 cloud: nacos: config: server-addr: 127.0.0.1:8848 file-extension: yml #文件后缀名 shared-configs: - common.${spring.cloud.nacos.config.file-extension} namespace: 4c9c23a2-0300-4c72-b07f-7846bd03e153 ``` namespace: 命名空间id 这样读到的就是test空间下的配置了 ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/acbd7d3b66c7470d82055c55b18a0cdd~tplv-k3u1fbpfcp-zoom-1.image) ### 🐎高阶用法六:灵活配置环境 #### 🐎第一步,nacos隔离环境 ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3f77d262c6fe4b84828b431fd5db7f5e~tplv-k3u1fbpfcp-zoom-1.image) #### 🐎第二步,pom文件配置环境 ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3ace2894587f4a89b4807fbf5a7f9e62~tplv-k3u1fbpfcp-zoom-1.image) ```java dev dev 127.0.0.1:8848 563742f8-6f8b-4b97-8a1f-2f6cf6beb5fa true test test 127.0.0.1:8848 4c9c23a2-0300-4c72-b07f-7846bd03e153 ``` 配置好了要刷新maven 好了之后会有两个配置文件选项 ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8ff41d40155e47eb886a2e277799d1be~tplv-k3u1fbpfcp-zoom-1.image) #### 🐎第三步,修改yml文件 ```yml spring: profiles: active: @profileActive@ application: name: nacos-config # appName 会自动读取nacos中dataid为nacos-config.yml的文件 cloud: nacos: config: server-addr: @serverAddr@ file-extension: yml #文件后缀名 shared-configs: - common.${spring.cloud.nacos.config.file-extension} namespace: @namespace@ ``` 但是这个时候启动不了的,因为原生的yml不支持`@`符号 #### 🐎第四步,修改pom文件使其支持`@`符号 ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ab94f4c81823459aba966398b6fee84d~tplv-k3u1fbpfcp-zoom-1.image) ```xml org.yaml snakeyaml ``` ```xml src/main/resources true ``` 配置好了之后就可以启动 切换环境在maven右侧切换即可 ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4987286d1d364bc482a075cae1fe9cb6~tplv-k3u1fbpfcp-zoom-1.image) 总的来说,Spring Cloud Alibaba Nacos Config是一种用于管理分布式系统配置的工具,它提供了服务器端和客户端的支持,允许用户在Nacos服务器上集中管理Spring Cloud应用程序的外部配置。Spring Cloud Alibaba Nacos Config提供了Config Server和Client的替代方案,客户端和服务器上的概念与Spring Environment和PropertySource有着一致的抽象,在特殊的bootstrap阶段,配置被加载到Spring环境中。在应用程序从开发到测试再到生产的不同环境中,用户可以通过Nacos集中管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。 使用Spring Cloud Alibaba Nacos Config的主要步骤包括: - 在Nacos配置管理页面上创建配置文件。 - 在项目中配置Nacos地址和指定文件,这必须使用bootstrap.properties配置文件来配置Nacos Server地址。 - 在应用程序启动时读取配置文件。在SpringBoot启动内中读取配置文件,可以使用SpringApplication类的run()方法,然后在ConfigurableApplicationContext上调用getEnvironment().getProperty()方法读取配置属性。 在高阶用法方面,可以使用YAML文件和业务类读取配置。使用YAML文件时,需要在Nacos服务器上创建nacos-config.yml文件,并将配置文件后缀设置为yml。然后,可以使用bootstrap.yml配置文件来指定Nacos服务器地址和文件扩展名。在使用业务类读取配置时,需要使用@Value注解将属性注入到控制器中,并使用@RefreshScope注解使该控制器成为可刷新的bean。这使得在应用程序运行时,可以通过HTTP接口刷新该控制器并重新读取配置。 综上所述,Spring Cloud Alibaba Nacos Config为分布式系统中的外部化配置提供了可靠的解决方案,同时也提供了很多的高级用法,用户可以根据需要自由使用。