NacosConfig

NacosConfig是一个重要的服务配置中心,它在微服务架构中起到了关键的作用。以下是NacosConfig的主要作用:

  • 集中管理配置:NacosConfig提供了用于存储配置和其他元数据的key/value存储功能,使得开发者可以在Nacos Server上集中管理Spring Cloud应用的外部属性配置。这样,服务之间的配置信息可以得到统一管理和维护,简化了配置管理流程。
  • 支持动态配置:NacosConfig支持动态配置,这意味着在配置发生更改时,服务可以实时获取最新的配置信息,而无需重启服务。这种动态配置的能力使得微服务架构更加灵活和可维护。
  • 环境隔离:NacosConfig通过命名空间(Namespace)的概念实现了不同环境的配置隔离。不同的命名空间下可以存在相同的Group或Data ID的配置,这使得开发者可以方便地管理不同环境(如开发、测试、生产等)的配置资源,确保环境的独立性和安全性。
  • 配置维护便捷:在微服务架构中,集群中每一台主机的配置文件可能都是相同的,对配置文件的更新维护可能会成为一个棘手问题。而NacosConfig可以作为配置中心,对Spring Cloud中各个微服务文件进行统一维护管理,简化了配置文件的更新和维护过程

Nacos配置

     <!--nacos-服务注册发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--nacos-配置文件   需要添加当jar包 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

NacosConfig主要是用来做配置文件使用,需要使用 bootstrap.yml文件作为引导文件

在这里插入图片描述

nacos配置名称如果和服务名称一致,则会自动将服务名称作为配置名称
nacos的配置文件默认是propertys格式,在application.yml中配置nacos的配置文件格式为properties,因为是默认格式,所以也可以不配

spring:
  cloud:
    nacos:
      config:
        file-extension: properties

在这里插入图片描述

只有默认的配置文件才可以支持profile粒度的配置,跟服务名相同的配置文件,如果想支持profile粒度的配置,则需要在配置文件中添加profile前缀,如: stock-server-dev.properties
除了默认的配置文件,其他的配置文件必须写上文件后缀,如: stock-server-dev.properties,后缀必须和默认的配置文件后缀一致,
在日常开发中如果遇到多套环境下的不同配置,可以通过 Spring 提供的 ${spring.profiles.active} 这个配置项选择不同情况下的配置。

spring.profiles.active=dev

如果需要切换到生产环境,只需要更改 ${spring.profiles.active} 参数配置即可。如下所示

spring.profiles.active=product

nacos配置文件优先级, profile > 默认配置文件 > extension-configs > share-configs ,优先级大的会覆盖优先级小的,并且会形成互补
namespace的配置:代表不同环境

spring:
  application:
    name: order-server
  cloud:
    nacos:
      discovery:
        password: nacos
        username: nacos
        namespace: public
        config:
          filere-extension: yaml
          group: dev
          namespace: dev
          data-id: order-server
          share-configs:  # 在同一个share-configs中,后面的配置文件会覆盖之前的
            - group: dev   # 默认命名攻坚 default-group
              data-id: stock-0 # 配置文件名
              refresh: true   # 不会默认感知文件变化,如果需要默认感知只需要设置为false即可
            - group: dev
              data-id: stock-1
          extension-configs[0]:   # 第二个配置文件方式,使用下标方式 优先级extension-configs 大于 share-configs
            data-id: stock-0
            refresh: true
      server-addr: 127.0.0.1:8848

#这段YAML代码是用于配置Spring Cloud Nacos Discovery的,它定义了服务发现和配置管理的一些参数。
#spring.application.name:设置应用的名称为order-server。
#spring.cloud.nacos.discovery:配置Nacos服务发现的相关参数。
#password:设置Nacos服务器的登录密码为nacos。
#username:设置Nacos服务器的登录用户名为nacos。
#namespace:设置Nacos的命名空间为public。
#config:配置Nacos配置管理的相关参数。
#file-extension:设置配置文件的扩展名为yaml。
#group:设置配置文件所属的分组为dev。
#namespace:设置配置管理的命名空间为dev。
#data-id:设置配置文件的ID为order-server。

配置文件内容
在这里插入图片描述
测试能否读取到当前配置信息

@SpringBootApplication
public class ProviderApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args);
        while(true) {
            String userName = applicationContext.getEnvironment().getProperty("user.name");
            String userAge = applicationContext.getEnvironment().getProperty("user.age");
            //获取当前部署的环境
            String currentEnv = applicationContext.getEnvironment().getProperty("current.env");
            System.err.println("in "+currentEnv+" enviroment; "+"user name :" + userName + "; age: " + userAge);
            TimeUnit.SECONDS.sleep(1);
        }
    }
}

自定义 Namespace 的配置
Nacos 内部有 Namespace 的概念:

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离, 例如开发测试环境和生产环境的资源(如配置、服务)隔离等。 在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 中 public 命名空间即默认的命名空间。如果需要使用自定义的命名空间,可以通过以下配置来实现:
该配置必须放在 bootstrap.properties 文件中。此外 spring.cloud.nacos.config.namespace 的值是 namespace 对应的 id,id 值可以在 Nacos 的控制台获取。并且在添加配置时注意不要选择其他的 namespace,否则将会导致读取不到正确的配置。


spring.cloud.nacos.config.namespace=YOUR_NAMESPACE_ID

自定义 Group 的配置
在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下, 默认使用的是组 DEFAULT_GROUP 。如果需要自定义 Group,可以通过以下配置来实现:

spring.cloud.nacos.config.group=YOUR_GROUP_NAME

配置的优先级
Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置:

  • A: 通过 spring.cloud.nacos.config.shared-dataids 支持多个共享 Data Id 的配置

  • B: 通过 spring.cloud.nacos.config.ext-config[n].data-id 的方式支持多个扩展 Data Id 的配置

  • C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置

当三种方式共同使用时,他们的一个优先级关系是: A < B < C

springc.config.import 引入
这里假设有一个配置文件 bootstrap.yml,升级到 2021.0.1.0 以上的版本应该怎么配置呢?

# bootstrap.yml
spring:
  cloud:
    nacos:
      config:
        name: test.yml
        group: DEFAULT_GROUP
        server-addr: 127.0.0.1:8848
        extension-configs:
          - dataId: test01.yml
            group: group_01
          - dataId: test02.yml
            group: group_02
            refresh: false

注意:上面的配置和下面的配置是等价的!

# application.yml
spring:
  cloud:
    nacos:
      config:
        group: DEFAULT_GROUP
        server-addr: 127.0.0.1:8848
  config:
    import:
      - optional:nacos:test.yml # 监听 DEFAULT_GROUP:test.yml
      - optional:nacos:test01.yml?group=group_01 # 覆盖默认 group,监听 group_01:test01.yml
      - optional:nacos:test02.yml?group=group_02&refreshEnabled=false # 不开启动态刷新
      - nacos:test03.yml # 在拉取nacos配置异常时会快速失败,会导致 spring 容器启动失败

使用 spring.config.import 引入配置时的注意事项如下:

  1. 如果使用 spring.config.import 就不能使用 bootstrap.yml/properties 引入配置的方式了;
  2. 如果引入了 spring-cloud-starter-alibaba-nacos-config,并且使用 import 方式导入配置, 项目启动时会自动检测是否引入了 nacos 条目,如果没有 import nacos 条目,会出现如下错误:
The spring.config.import property is missing a nacos: entry

Action:

Add a spring.config.import=nacos: property to your configuration.
If configuration is not required add spring.config.import=optional:nacos: instead.
To disable this check, set spring.cloud.nacos.config.import-check.enabled=false.

配置项参考

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值