目录

今日说码

点滴记录中国代码进程

X

Spring Cloud Alibaba 学习笔记(十一):服务配置(Nacos Config)

目录:Spring Cloud Alibaba学习笔记(总) - 今日说码 (96xl.top)

上一篇:Spring Cloud Alibaba学习笔记(十):网关全局过滤 - 今日说码 (96xl.top)


概述

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

Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。

Spring Cloud Alibaba Nacos Config 是 Spring Cloud Config Server 和 Client 的替代方案,客户端和服务器上的概念与 Spring Environment 和 PropertySource 有着一致的抽象,在特殊的 bootstrap 阶段,配置被加载到 Spring 环境中。当应用程序通过部署管道从开发到测试再到生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。

创建配置文件

在Nacos Server中创建配置文件,访问http://localhost:8848/nacos,在配置列表中,点击右上角的加号。

image.png

服务提供者项目为例,新建以下配置:

image.png

  • Data ID可随意指定,但是默认扩展名为.properties ,希望使用 YAML 配置,此处必须指明是.yaml
  • 配置格式指定为YAML。
  • 配置内容中将spring-cloud-alibaba-nacos-provider 子模块的application.yml 配置文件中的所有配置复制过来。

点击发布,发布成功后在列表上就可以看到刚才添加的配置了。

image.png

Nacos Config客户端的使用

服务提供者项目为例。

修改pom

使用Nacos Config客户端需要添加 org.springframework.cloud:spring-cloud-starter-alibaba-nacos-config 依赖,之前创建项目时已经添加过了,就不再重复添加了。

添加bootstrap.yml

删除之前创建的 application.yml 配置文件,同时在 resources 目录下添加 bootstrap.yml 配置文件,内容如下:

spring:
  application:
    # 这里的应用名对应Nacos Config中的Data ID,实际应用名称以配置中心的配置为准
    name: nacos-provider-config
  cloud:
    nacos:
      config:
        # Nacos Server的地址
        server-addr: 127.0.0.1:8848
        # 文件扩展名
        file-extension: yaml

Spring Boot 配置文件的加载顺序,依次为 bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml

项目结构

项目最终目录结构如下:

image.png

启动项目

重新启动 ProviderApplication 实例,等待出现 Started ProviderApplication in 7.105 seconds (JVM running for 8.228) 启动成功的提示后,可以在控制台日志中看到成功加载配置文件的提示。

image.png

上面这行日志虽然是WARN级别,但是并不影响正常启动。大致意思就是忽略空的nacos配置,并根据dataId[nacos-provider-config]和group[DEFAULT_group]获取它,其实还是正常获取到了。

配置动态更新

Nacos Config也支持配置的动态更新,以上面的 nacos-provider-config.yaml 为例。

修改配置

在Nacos Server配置内容中增加一个 user.name 的属性,修改后重新发布。

image.png

修改Controller

NacosProviderController 类中添加一个新接口用来测试,代码如下:

@Autowired
private ConfigurableApplicationContext applicationContext;

@GetMapping("/hi")
public String sayHi() {
    return "Hello " + applicationContext.getEnvironment().getProperty("user.name");
}

测试

重启 ProviderApplication 实例,等待出现 Started ProviderApplication in 6.407 seconds (JVM running for 7.459) 启动成功的提示后,访问localhost:8081/hi,会出现以下响应:

image.png

这个 user.name 属性就是刚才新加的,将属性值进行修改后重新发布,再次访问localhost:8081/hi,会出现以下响应:

image.png

说明配置刷新成功,同时控制台日志可以查看到相应提示:

image.png

可以在 bootstrap.yml 中使用 spring.cloud.nacos.config.refresh.enabled=false 来关闭动态刷新,默认为true。

Nacos Config多环境的配置

Spring Boot Profile

我们在做项目开发的时候,生产环境和测试环境的一些配置可能会不一样,有时候一些功能也可能会不一样,所以我们可能会在上线的时候手工修改这些配置信息。但是 Spring 中为我们提供了 Profile 这个功能。我们只需要在启动的时候添加一个虚拟机参数,激活自己环境所要用的 Profile 就可以了。

操作起来很简单,只需要为不同的环境编写专门的配置文件,如:application-dev.ymlapplication-prod.yml, 启动项目时只需要增加一个命令参数 --spring.profiles.active=环境配置 即可,启动命令如下:

java -jar xxx.jar --spring.profiles.active=prod

Nacos Config Profile

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

创建配置文件

在Nacos Server中添加一个新的配置文件,内容如下:

image.png

这个配置文件仅仅是将端口号由 8081 改为了 8082,点击发布。

添加bootstrap-prod.yml

bootstrap.yml 配置文件同级目录下添加 bootstrap-prod.yml 配置文件,内容如下:

image.png

主要区别就是添加了 spring.profiles.active=prod 配置,用于指定访问Nacos Server中的 nacos-provider-config-prod.yaml 配置文件。

启动项目

此时我们有两个配置文件,分别为 bootstrap.ymlbootstrap-prod.yml ,我们需要指定启动时加载哪一个配置文件。

点击编辑 ProviderApplication 启动类配置(上次我们测试服务消费者(Feign)负载均衡时,修改过一次)。

image.png

在Active profiles配置后面添加 prod,即可指定启动时加载 bootstrap-prod.yml配置文件。

image.png

点击保存后,再次右键 ProviderApplication 选择Debug启动(上次我们测试服务消费者(Feign)负载均衡时,已经设置过允许并行运行),等待出现 Started ProviderApplication in 6.605 seconds (JVM running for 7.666) 启动成功的提示后,观察控制台日志,可以看到加载的是 nacos-provider-config-prod.yaml 配置文件,并且项目启动使用的端口号是我们在 nacos-provider-config-prod.yaml 配置文件中指定的 8082,说明配置生效。

image.png

Group

上面我们在Nacos Server添加配置时,Group使用的是默认的 DEFAULT_GROUP,这里是可以修改为其他的Group。

image.png

在列表上可以看到刚才新加的配置。

image.png

这时候 application.yml 配置文件中就需要添加 spring.cloud.nacos.config.group=TEST 配置了,指定一下group名称,不指定的话使用的是默认的 DEFAULT_GROUP

image.png

命名空间

在命名空间列表中,可以看到有一个保留的命名空间 public,我们上面添加的所有配置都是在这个命名空间下。如果需要新增其他命名空间的话,点击右上角新建命名空间,输入名称和描述即可。如果不指定命名空间ID,则会自动生成一个。

image.png

想要在新建的命名空间下添加配置,在配置列表中点击左上方的命名空间名称进行切换即可。

image.png

这时候 application.yml 配置文件中就需要添加 spring.cloud.nacos.config.namespace=da24b330-3ef1-4697-b502-2ac2507a6458 配置了,指定一下命名空间ID,不指定的话使用的是默认的 public

image.png

bootstrap.yml文件内容

最后 bootstrap.yml 配置文件内容如下:

spring:
  application:
    # 这里的应用名对应Nacos Config中的Data ID,实际应用名称以配置中心的配置为准
    name: nacos-provider-config
  cloud:
    nacos:
      config:
        # Nacos Server的地址
        server-addr: 127.0.0.1:8848
        # 文件扩展名
        file-extension: yaml
        # group名称
        group: TEST
        # 命名空间ID
        namespace: da24b330-3ef1-4697-b502-2ac2507a6458

目录:Spring Cloud Alibaba 学习笔记(总) - 今日说码 (96xl.top)

上一篇:Spring Cloud Alibaba 学习笔记(十):网关全局过滤 - 今日说码 (96xl.top)


标题:Spring Cloud Alibaba 学习笔记(十一):服务配置(Nacos Config)
作者:96XL
地址:https://solo.96xl.top/articles/2022/02/11/1644578351540.html