一、前言

在分布式系统中,由于服务数量巨多,为了方便服务 配置文件统一管理,实时更新,所以需要分布式配置中心组件。

Spring Cloud Alibaba Nacos Config 是 Spring Cloud Config 的替代方案。

二、maven引入相关包
		<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.3.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.3.RELEASE</version>
        </dependency>
三、配置文件
1.bootstrap.yml配置文件如下:
spring:
  application:
    name: provider-user
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        group: DEFAULT_GROUP
        file-extension: yaml
        enabled: true
        refresh-enabled: true
2.在 Nacos Spring Cloud 中,dataId 的完整格式如下:
${prefix}-${spring.profile.active}.${file-extension}

(1)prefix:

  • 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。

(2)spring.profile.active:

  • 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 p r e f i x . {prefix}. prefix.{file-extension}

(3)file-exetension :

  • 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
四、测试
1.测试controller
@RestController
public class UserService {
    @Value("${testname}")
    private String testName;

    @GetMapping("getTestName")
    public String getTestName(){
        return testName;
    }
}
2.nacos新增配置文件

在这里插入图片描述
在这里插入图片描述

3.访问测试

在这里插入图片描述

4.实现配置自动更新

在controller添加个注解@RefreshScope即可

@RestController
@RefreshScope
public class UserService {
    @Value("${testname}")
    private String testName;

    @GetMapping("getTestName")
    public String getTestName(){
        return testName;
    }
}
五、多环境配置
1.通过Data ID与profile实现
(1)配置文件

在bootstrap.yml增加参数 spring.profiles.active=dev

spring:
  application:
    name: provider-user
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        group: DEFAULT_GROUP
        file-extension: yaml
        enabled: true
        refresh-enabled: true
  profiles:
    active: dev
(2)在nacos后台增加dev配置文件

在这里插入图片描述
在这里插入图片描述

(3)测试

在这里插入图片描述

2.通过Group实现
(1) 配置文件

在bootstrap.yml 修改group的配置

spring:
  application:
    name: provider-user
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
#        group: DEFAULT_GROUP
        group: GROUP_DEV
        file-extension: yaml
        enabled: true
        refresh-enabled: true
#  profiles:
#    active: dev
(2)在nacos后台增加dev配置文件

在这里插入图片描述
在这里插入图片描述

(3)测试

在这里插入图片描述

3.通过Namespace实现
(1)在nacos后台增加namespace配置文件

在命名空间界面中,新增dev,test命名空间
在这里插入图片描述
在配置列表界面可以切换不同的命名空间来增加配置文件
在这里插入图片描述
namespaceid即为dev后面的那个数值

在这里插入图片描述

(2) 配置文件

在bootstrap.yml 指定namespace值

spring:
  application:
    name: provider-user
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
#        group: DEFAULT_GROUP
#        group: GROUP_DEV
        file-extension: yaml
        enabled: true
        refresh-enabled: true
        namespace: 7276f4f8-c4c9-4228-9843-c5b5ba99a1d2
#  profiles:
#    active: dev
(3)测试

在这里插入图片描述

4.几种方式的比较
  • 通过Data ID与profile实现

优点:这种方式与Spring Cloud Config的实现类似,命名规则类似。
缺点:这种方式在项目与环境多的时候,配置内容会显得非常混乱。配置列表中会看到各种不同应用,不同环境的配置交织在一起,非常不利于管理。
建议:项目不多时使用,或者可以结合Group对项目根据业务或者组织架构做一些拆分规划

  • 通过Group实现

优点:通过Group按环境将各个应用的配置隔离。可以非常方便地利用Data ID和Group的搜索功能,分别从应用纬度和环境纬度来查看配置。
缺点:由于会占用Group纬度,所以需要对Group的使用做好规划,毕竟业务上的一些配置分组起冲突等问题。
建议:这种方式虽然结构上比上一种更好一些,但是依然可能会有一些混乱,主要是在Group的管理上要做好规划和控制。

  • 通过Namespace实现(建议)

优点:官方建议的方式,通过Namespace来区分不同环境,释放了Group的自由度,这样可以让Group的使用专注于做业务层面的分组管理。同时,Nacos控制页面上对于Namespace也做了分组展示,不需要搜索,就可以隔离开不同的环境配置。非常易用。
缺点:没有啥缺点,可能就是多引入一个概念。

六、多环境配置
1、方式一

在bootstrap.yml配置文件中加入配置: spring.cloud.nacos.config.ext-config,配置信息如下:

spring:
  application:
    name: provider-user
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        group: DEFAULT_GROUP
        file-extension: yaml
        enabled: true
        refresh-enabled: true
        ext-config[0]:
          data-id: database-dev.yaml
          group: DEFAULT_GROUP
          refresh: true
        ext-config[1]:
          data-id: database-dev2.yaml
          group: DEFAULT_GROUP
          refresh: true
  profiles:
    active: dev

nacos配置中心文件如下:
在这里插入图片描述

启动项目,加载配置信息如下:
在这里插入图片描述
ext-configs优先级,[0] <[1]

1、方式二

在bootstrap.yml配置文件中加入配置: spring.cloud.nacos.config.ext-configshared-configs,配置信息如下:

spring:
  application:
    name: provider-user
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        group: DEFAULT_GROUP
        file-extension: yaml
        enabled: true
        refresh-enabled: true
        shared-configs[0]:
          data-id: database-dev.yaml
          group: DEFAULT_GROUP
          refresh: true
        shared-configs[1]:
          data-id: database-dev2.yaml
          group: DEFAULT_GROUP
          refresh: true

  #        ext-config[0]:
#          data-id: database-dev.yaml
#          group: DEFAULT_GROUP
#          refresh: true
  profiles:
    active: dev

nacos配置文件如下:
在这里插入图片描述
启动,加载配置信息如下:
在这里插入图片描述
shared-configs优先级,[0] <[1]

GitHub 加速计划 / na / nacos
124
24
下载
Nacos是由阿里巴巴开源的服务治理中间件,集成了动态服务发现、配置管理和服务元数据管理功能,广泛应用于微服务架构中,简化服务治理过程。
最近提交(Master分支:4 个月前 )
762303b9 * [ISSUE #12970] Fix NamingMetadataManager.removeInstanceMetadata() error fix #12970 * Update NamingMetadataManagerTest.java 9 天前
05561813 * fix type search on mysql model * 灰度模型迁移程序并发&迁移不落历史表 * Config migrate executor times * 1.Config migrate executor times 2. history comparation optimize * 1.Config migrate executor times 2. history comparation optimize * checkstyle 9 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐