Nacos作为配置中心的简单使用

简单实例

新建模块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界面上面选择新建配置,按下图操作

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

Nacos作为配置中心的简单使用

然后可以在配置文件中配置命名空间:

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/