引入nacos config依赖
<dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency></dependencies>
编写bootstrap.properties 文件内容
spring.application.name=nacosconfigspring.cloud.nacos.config.server-addr=localhost:8848${spring.application.name}.${file-extension.properties}
编写nacos config 配置 命名为 nacosconfig.properties

修改StudyNacosConfigApplication 类
package com.jiuge.study;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ConfigurableApplicationContext;@SpringBootApplicationpublic class StudyNacosConfigApplication {public static void main(String[] args) {ConfigurableApplicationContext applicationContext = SpringApplication.run(StudyNacosConfigApplication.class, args);String userName = applicationContext.getEnvironment().getProperty("common.name");String userAge = applicationContext.getEnvironment().getProperty("common.age");System.out.println("common name :"+userName+"; age: "+userAge);}}
启动,测试, 控制台输出一下内容
common name :fox; age: 33
支持配置的动态更新, 修改启动类
package com.jiuge.study;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ConfigurableApplicationContext;import java.util.concurrent.TimeUnit;@SpringBootApplicationpublic class StudyNacosConfigApplication {public static void main(String[] args) throws InterruptedException {ConfigurableApplicationContext applicationContext = SpringApplication.run(StudyNacosConfigApplication.class, args);while (true) {String userName = applicationContext.getEnvironment().getProperty("common.name");String userAge = applicationContext.getEnvironment().getProperty("common.age");System.err.println("common name :" + userName + "; age: " + userAge);TimeUnit.SECONDS.sleep(1);}}}
启动,测试, 控制台每隔一秒输出内容
common name :haha; age: 22common name :haha; age: 22common name :haha; age: 22common name :aaaa; age: 23common name :aaaa; age: 23common name :aaaa; age: 23common name :aaaa; age: 23common name :aaaa; age: 23common name :aaaa; age: 23

支持profile粒度的配置
spring-cloud-starter-alibaba-nacos-config 在加载配置的时候,不仅仅加载了以 dataid 为 ${spring.application.name}.${file-extension:properties} 为前缀的基础配置,还加载了dataid为 ${spring.application.name}-${profile}.${file-extension:properties} 的基础配置。在日常开发中如果遇到多套环境下的不同配置,可以通过Spring 提供的 ${spring.profiles.active} 这个配置项来配置。
spring.profiles.active=dev
nacos 注册中心上添加配置 nacosconfig-prod.properties
内容如下
common.name=jiugecommon.age=27

修改bootstrap.properties文件
spring.application.name=nacosconfigspring.cloud.nacos.config.server-addr=localhost:8848# 通过 变量扩展名的方式进行命名#${spring.application.name}.${file-extension.properties}spring.profiles.active=prod#profile粒度的配置${spring.application.name}-${profile}.${file-extension.properties}
变换成yml 配置
spring:cloud:nacos:config:server-addr: localhost:8848application:name: nacosconfigprofiles:active: prod
在nacos 上配置 nacosconfig-prod.properties
内容如下
common.name=jiugecommon.age=27
控制台输出
common name :小苗; age: 30common name :小苗; age: 30
支持自定义namespace的配置
用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespace。如果需要使用自定义的命名空间,可以通过以下配置来实现:
spring.cloud.nacos.config.namespace=e39f93ae-bcc9-4539-99b8-38b9a9054224
nacos 配置中心上添加命名空间

在新建的命名空间下 新建内容

内容为
common.name=小舞common.age=19
bootstrap.yml 配置如下
spring:cloud:nacos:config:server-addr: localhost:8848namespace: e39f93ae-bcc9-4539-99b8-38b9a9054224application:name: nacosconfigprofiles:active: dev
测试,验证,控制台输出
common name :小舞; age: 19common name :小舞; age: 19common name :小舞; age: 19
支持自定义Group 的配置
Group是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULTGROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 databaseurl 配置和 MQtopic 配置。在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下,默认是DEFAULTGROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:
spring.cloud.nacos.config.group=DEVELOP_GROUP
添加DEVELEOP_GROUP配置
common.name=宁荣荣common.age=21

修改yml配置
spring:cloud:nacos:config:server-addr: localhost:8848namespace: e39f93ae-bcc9-4539-99b8-38b9a9054224group: DEVELOP_GROUPapplication:name: nacosconfigprofiles:active: dev
验证,控制台输出
common name :宁荣荣; age: 21common name :宁荣荣; age: 21
nacos 配置中心加上 nacosconfig-prod.properties 配置

nacosconfig-prod.properties 的配置内容为
common.name=竹清common.age=20

修改yml配置
spring:cloud:nacos:config:server-addr: localhost:8848namespace: e39f93ae-bcc9-4539-99b8-38b9a9054224group: DEVELOP_GROUPapplication:name: nacosconfigprofiles:active: prod
测试,验证, 控制台输出
common name :竹清; age: 20common name :竹清; age: 20
支持自定义扩展的Data Id 配置
Data ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。
通过自定义扩展的Data Id 配置, 既可以解决多个应用间配置共享的问题, 又可以支持一个应用有多个配置文件
# 自定义 Data Id 的配置#不同工程的通用配置 支持共享的 DataIdspring.cloud.nacos.config.sharedConfigs[0].data-id= common.yamlspring.cloud.nacos.config.sharedConfigs[0].group=REFRESH_GROUPspring.cloud.nacos.config.sharedConfigs[0].refresh=true# config external configuration# 支持一个应用多个 DataId 的配置spring.cloud.nacos.config.extensionConfigs[0].data-id=ext-config-common01.propertiesspring.cloud.nacos.config.extensionConfigs[0].group=REFRESH_GROUPspring.cloud.nacos.config.extensionConfigs[0].refresh=truespring.cloud.nacos.config.extensionConfigs[1].data-id=ext-config-common02.propertiesspring.cloud.nacos.config.extensionConfigs[1].group=REFRESH_GROUPspring.cloud.nacos.config.extensionConfigs[1].refresh=true
nacos 配置中心添加配置 common.yaml 文件

内容如下
common:age: 20name: 小奥

修改bootstrap.yml 配置文件内容为
spring:cloud:nacos:config:server-addr: localhost:8848namespace: e39f93ae-bcc9-4539-99b8-38b9a9054224shared-configs[0].data-id: common.yamlshared-configs[0].group: DEFAULT_GROUPshared-configs[0].refresh: trueapplication:name: studyconfig
在nacos 配置中心上添加配置 文件 common-ext.yaml

common:type: 男生女生name: helloc

修改bootstrap.yml 配置文件内容为
spring:cloud:nacos:config:server-addr: localhost:8848namespace: e39f93ae-bcc9-4539-99b8-38b9a9054224shared-configs[0].data-id: common.yamlshared-configs[0].group: DEFAULT_GROUPshared-configs[0].refresh: trueshared-configs[1].data-id: common-ext.yamlshared-configs[1].group: REFRESH_GROUPshared-configs[1].refresh: trueshared-configs[2].data-id: common-share.yamlshared-configs[2].group: REFRESH_GROUPshared-configs[2].refresh: trueapplication:name: studyconfig
spring启动程序
package com.jiuge.study;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ConfigurableApplicationContext;import java.util.concurrent.TimeUnit;@SpringBootApplicationpublic class StudyNacosConfigApplication {public static void main(String[] args) throws InterruptedException {ConfigurableApplicationContext applicationContext = SpringApplication.run(StudyNacosConfigApplication.class, args);while (true) {String userName = applicationContext.getEnvironment().getProperty("common.name");String userAge = applicationContext.getEnvironment().getProperty("common.age");String ddd = applicationContext.getEnvironment().getProperty("common.type");String eee = applicationContext.getEnvironment().getProperty("common.name");System.err.println("common name :" + userName + "; age: " + userAge + ", type=" + ddd + " ; eee:=" + eee);TimeUnit.SECONDS.sleep(1);}}}
测试,验证,输出
common name :gaogao; age: 20, type=男生女生 ; eee:=gaogaocommon name :gaogao; age: 20, type=男生女生 ; eee:=gaogaocommon name :gaogao; age: 20, type=男生女生 ; eee:=gaogao
配置的优先级
Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置。
A: 通过 spring.cloud.nacos.config.shared-configs 支持多个共享 Data Id 的配置
B: 通过 spring.cloud.nacos.config.ext-config[n].data-id 的方式支持多个扩展 Data Id 的配置
C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置
当三种方式共同使用时,他们的一个优先级关系是:A < B < C
优先级从高到低
优先级从高到低:1) nacos-config-product.yaml 精准配置2) nacos-config.yaml 同工程不同环境的通用配置3) ext-config: 不同工程 扩展配置4) shared-dataids 不同工程通用配置: common2.yml > common1.yml
@RefershScope 注解
@Value注解可以获取到配置中心的值,但是无法动态感知修改后的值,需要利用@RefreshScope注解
package com.jiuge.study.controller;import org.springframework.beans.factory.annotation.Value;import org.springframework.cloud.context.config.annotation.RefreshScope;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RefreshScopepublic class ScopeRefershController {@Value("${common.name}")private String name;@Value("${common.age}")private String age;@GetMapping("/common")public String hello() {return "name =" + name + ",age = " + age;}}
测试,验证
nacos 配置中心的配置如下
common.name=rrwcommon.age=12
请求接口 http://localhost:8080/common/ 输出
name =rrw,age = 12
修改nacos 的配置
common.name=jiugecommon.age=18
请求接口 http://localhost:8080/common/ , 输出
name =jiuge ,age = 18
至此,nacos config 的简单的使用就介绍完毕了。




