简单实例
新建模块cloudalibaba-config-nacos-client3377
依赖
<!-- nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<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.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
yaml配置
Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动,所以这里本地的配置文件名还是使用bootstrap.yml
:
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 # 注册中心
config:
server-addr: localhost:8848 # 配置中心
file-extension: yaml # 这里指定的文件格式需要和nacos上新建的配置文件后缀相同,否则读不到
dataId的命名规则
spring.application.name是构成 Nacos 配置管理 dataId
字段的一部分。
在 Nacos Spring Cloud 中,dataId 的完整格式如下:
${prefix}-${spring.profile.active}.${file-extension}
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。spring.profile.active
即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 {prefix}.{file-extension}file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持 properties 和 yaml 类型。
为了指定默认profile,我们这里再新建一个application.yml,内容为:
spring:
profiles:
active: dev # 开发环境
我们在nacos界面上面选择新建配置,按下图操作

config:
info: "config info for dev, from nacos config center"
是我们用于测试的远程配置
启动类
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientMain3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args);
}
}
controller
@RestController
@RefreshScope // 支持nacos的动态刷新
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo(){
return configInfo;
}
}
运行模块,访问 http://localhost:3377/config/info 可以看到配置被正常读取。
分类管理
Nacos上面的配置文件由namespace(命名空间)+group(分组)+dataId唯一确定。
最外层的namespace是可以用于区分部署环境的,Group和DataId逻辑上区分两个目标对象。
namespace默认为public,group默认为DEFAULT_GROUP
比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。
dataId方案
我们再在nacos上默认命名空间默认分组新建一个配置nacos-config-client-test.yaml
,内容为
config:
info: "config info for test, from nacos config center"
然后将application.yml改为
spring:
profiles:
active: test # 测试环境
模块重启,再次访问 http://localhost:3377/config/info ,可以看到已正确读取nacos-config-client-test.yaml
的配置,并且可以尝试修改nacos-config-client-test.yaml
的内容,可以验证nacos能动态刷新读取配置。
group方案
新建配置文件,dataId为nacos-config-client-info.yaml
,group填写DEV_GROUP
,内容为:
config:
info: "nacos-config-client-info.yaml, DEV_GROUP"
再新建一个配置文件,dataId也为nacos-config-client-info.yaml
,group填写TEST_GROUP
,内容为:
config:
info: "nacos-config-client-info.yaml, TEST_GROUP"
之后可以在bootstrap.yml中指定group:
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 # 注册中心
config:
server-addr: localhost:8848 # 配置中心
file-extension: yaml # 这里指定的文件格式需要和nacos上新建的配置文件后缀相同,否则读不到
group: TEST_GROUP # 指定group
命名空间方案
nacos界面->命名空间->新建命名空间。新建两个名为dev和test的命名空间。然后可以看到它们的命名空间ID

然后可以在配置文件中配置命名空间:
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 # 注册中心
config:
server-addr: localhost:8848 # 配置中心
file-extension: yaml # 这里指定的文件格式需要和nacos上新建的配置文件后缀相同,否则读不到
group: TEST_GROUP # 指定group
namespace: 4ccc4c4c-51ec-4bd1-8280-9e70942c0d0c # 指定命名空间ID
原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/nacos%e4%bd%9c%e4%b8%ba%e9%85%8d%e7%bd%ae%e4%b8%ad%e5%bf%83%e7%9a%84%e7%ae%80%e5%8d%95%e4%bd%bf%e7%94%a8/