4.springcloudAlibaba-nacos配置中心

 1.springcloudAlibaba-nacos

2.springcloudAlibaba-openFeign

3.springcloudAlibaba-负载均衡器Ribbon

4.springcloudAlibaba-nacos配置中心

5.springcloudAlibaba-Seata 分布式事务

6.springcloudAlibaba-sentinel

7.springcloudAlibaba-网关gateway


目录

介绍

基本操作

config其他配置

关闭动态刷新

支持profile粒度的配置

支持自定义 namespace 的配置

自定义 Group 的配置

自定义扩展的 Data Id 配置

@RefreshScope

配置的优先级

其他配置


介绍

spring-cloud-alibaba/nacos-config.adoc at 4f6e56dafd60305dfe8f143015d9d39bc6a7fc49 · alibaba/spring-cloud-alibaba · GitHub

Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使

用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。

基本操作

新建module nacosConfig

pom 引入

        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        
       
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
            org.springframework.boot
            spring-boot-starter-web
        

注意!! resources 下创建 bootstrap.yml

server:
  port: 9995
spring:
  application:
    name: nacosConfig-service
  cloud:
    nacos:
      server-addr: 49.232.193.91:8848
      username: nacos
      password: nacos

spring cloud通过创建bootstrap上下文来运转,它是ApplicationContext的父上下文。它负责从外部源加载配置属性,并负责解密本地外部配置文件中的属性。默认情况下bootstrap.yml具有较高的优先级,这个地方有个坑,稍后说

创建application启动类

在启动类中写一个获取applicationContent 内的name

public class nacosConfigApplication {
    public static void main(String[] args) throws InterruptedException {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(nacosConfigApplication.class);
        while(true) {
            //当动态配置刷新时,会更新到 Enviroment中,因此这里每隔一秒中从Enviroment中获取配置
            String userName = applicationContext.getEnvironment().getProperty("user.name");
            String userAge = applicationContext.getEnvironment().getProperty("user.age");
            System.err.println("user name :" + userName + "; age: " + userAge);
            TimeUnit.SECONDS.sleep(1);
        }

    }
}

4.springcloudAlibaba-nacos配置中心_第1张图片

启动项目

4.springcloudAlibaba-nacos配置中心_第2张图片

可以看到nacos 中配置的信息打印了出来

我们可以修改 nacos中刚才配置的name 看是否支持实时变更

4.springcloudAlibaba-nacos配置中心_第3张图片

4.springcloudAlibaba-nacos配置中心_第4张图片

也没有问题

这里说一个问题,其实bootstrap.yml跟application.yml可以共存,bootstrap的优先级高于application这是没有问题的, 但是很多人说bootstrap 不会被application覆盖!!!这里多次测试 bootstrap都被application覆盖,大家有兴趣可以试一下,开发的时候尽量用bootstrap吧,或者两者不要有重复名的地方。有大佬知道真理的麻烦帮忙解释一下

我们继续

config其他配置

可以使用其他的文件类型nacos客户端默认是properties 的文件扩展名,用非properties格式 必须指定文件类型

4.springcloudAlibaba-nacos配置中心_第5张图片

4.springcloudAlibaba-nacos配置中心_第6张图片

关闭动态刷新

你可以通过配置 spring.cloud.nacos.config.refresh.enabled=false 来关闭动态刷新

支持profile粒度的配置

Nacos Config 在加载配置的时候,不仅仅加载了以 DataId 为 ${spring.application.name}.${file-extension:properties} 为前缀的基础配置,还加载了DataId为 ${spring.application.name}-${profile}.${file-extension:properties} 的基础配置。在日常开发中如果遇到多套环境下的不同配置,可以通过Spring 提供的 ${spring.profiles.active} 这个配置项来配置。

bootstrap.yml中增加 profile 配置

server:
  port: 9995
spring:
  profiles:
    active: dev #选择环境
  application:
    name: nacosConfig-service
  cloud:
    nacos:
      server-addr: 49.232.193.91:8848
      username: nacos
      password: nacos
      config:
        file-extension: yaml #nacos客户端默认是properties 的文件扩展名,用非properties格式 必须配置

新增nacos 配置文件

4.springcloudAlibaba-nacos配置中心_第7张图片

4.springcloudAlibaba-nacos配置中心_第8张图片

再增加一个 pro

4.springcloudAlibaba-nacos配置中心_第9张图片

启动项目查看日志

4.springcloudAlibaba-nacos配置中心_第10张图片

4.springcloudAlibaba-nacos配置中心_第11张图片

可以看到 name 变了 age 还是 11888

配置文件优先级大的会覆盖优先级小的 ,并且形成互补

profile>默认配置文件

支持自定义 namespace 的配置

但是在实际开发中很少用上面通过家后缀dev的形式区分,更多的还是通过namespace来进行区分

namespace 用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespace。如果需要使用自定义的命名空间,可以通过以下配置来实现:

spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7

该配置必须放在 bootstrap.properties 文件中。此外 spring.cloud.nacos.config.namespace 的值是 namespace 对应的 id,id 值可以在 Nacos 的控制台获取。并且在添加配置时注意不要选择其他的 namespae,否则将会导致读取不到正确的配置。

4.springcloudAlibaba-nacos配置中心_第12张图片

4.springcloudAlibaba-nacos配置中心_第13张图片

4.springcloudAlibaba-nacos配置中心_第14张图片

4.springcloudAlibaba-nacos配置中心_第15张图片

自定义 Group 的配置

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

spring.cloud.nacos.config.group=DEVELOP_GROUP

该配置必须放在 bootstrap.properties 文件中。并且在添加配置时 Group 的值一定要和 spring.cloud.nacos.config.group 的配置值一致。

一般是在同一个环境中区分不同的项目使用 dataId 是可以一样的

自定义扩展的 Data Id 配置

# config external configuration
# 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新
spring.cloud.nacos.config.ext-config[0].data-id=ext-config-common01.properties

# 2、Data Id 不在默认的组,不支持动态刷新
spring.cloud.nacos.config.ext-config[1].data-id=ext-config-common02.properties
spring.cloud.nacos.config.ext-config[1].group=GLOBALE_GROUP

# 3、Data Id 既不在默认的组,也支持动态刷新
spring.cloud.nacos.config.ext-config[2].data-id=ext-config-common03.properties
spring.cloud.nacos.config.ext-config[2].group=REFRESH_GROUP
spring.cloud.nacos.config.ext-config[2].refresh=true
  • 通过 spring.cloud.nacos.config.ext-config[n].data-id 的配置方式来支持多个 Data Id 的配置。
  • 通过 spring.cloud.nacos.config.ext-config[n].group 的配置方式自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
  • 通过 spring.cloud.nacos.config.ext-config[n].refresh 的配置方式来控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。

其中 n 的值越大,优先级越高。

也可以通过shared-configs配置

4.springcloudAlibaba-nacos配置中心_第16张图片

这里data ID一定要有扩展名 否则不生效

server:
  port: 9995
spring:
  profiles:
    active: pro
  application:
    name: nacosConfig-service
  cloud:
    nacos:
      server-addr: 49.232.193.91:8848
      username: nacos
      password: nacos
      config:
        file-extension: yaml #nacos客户端默认是properties 的文件扩展名,用非properties格式 必须配置
        namespace: 550133a7-bd2d-4a87-9bac-8075c6048512
        shared-configs:
          - data-id: shared-configs.yml
        #        extension-configs[0]:
        #          data-id: shared-configs.yml

4.springcloudAlibaba-nacos配置中心_第17张图片

两种实现方式 优先级 profile>默认配置文件>extension-configs(下标越大会覆盖前面小的)>shared-configs(下标越大会覆盖前面小的)

@RefreshScope

@Value注解可以获取到配置中心的值,但是无法动态感知修改后的值,需要利用@RefreshScope注解

配置的优先级

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

其他配置

配置项

Key

默认值

说明

服务端地址

spring.cloud.nacos.config.server-addr

Nacos Server 启动监听的ip地址和端口

配置对应的 DataId

spring.cloud.nacos.config.name

先取 prefix,再取 name,最后取 spring.application.name

配置对应的 DataId

spring.cloud.nacos.config.prefix

先取 prefix,再取 name,最后取 spring.application.name

配置内容编码

spring.cloud.nacos.config.encode

读取的配置内容对应的编码

GROUP

spring.cloud.nacos.config.group

DEFAULT_GROUP

配置对应的组

文件扩展名

spring.cloud.nacos.config.fileExtension

properties

配置项对应的文件扩展名,目前支持 properties 和 yaml(yml)

获取配置超时时间

spring.cloud.nacos.config.timeout

3000

客户端获取配置的超时时间(毫秒)

接入点

spring.cloud.nacos.config.endpoint

地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址

命名空间

spring.cloud.nacos.config.namespace

常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等

AccessKey

spring.cloud.nacos.config.accessKey

当要上阿里云时,阿里云上面的一个云账号名

SecretKey

spring.cloud.nacos.config.secretKey

当要上阿里云时,阿里云上面的一个云账号密码

Nacos Server 对应的 context path

spring.cloud.nacos.config.contextPath

Nacos Server 对外暴露的 context path

集群

spring.cloud.nacos.config.clusterName

配置成Nacos集群名称

共享配置

spring.cloud.nacos.config.sharedDataids

共享配置的 DataId, "," 分割

共享配置动态刷新

spring.cloud.nacos.config.refreshableDataids

共享配置中需要动态刷新的 DataId, "," 分割

自定义 Data Id 配置

spring.cloud.nacos.config.extConfig

属性是个集合,内部由 Config POJO 组成。Config 有 3 个属性,分别是 dataId, group 以及 refresh

你可能感兴趣的:(java,java,spring,boot,spring)