(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)

案例源码gitee地址:https://gitee.com/BanSheng/spring-cloud-alibaba-examples/tree/master/nacos-examples

 Nacos 配置中心

一、Nacos Config 简介

使用 Spring Cloud Alibaba Nacos Config,可基于 Spring Cloud 的编程模型快速接入 Nacos 配置管理功能。

上一节 Spring Cloud Alibaba Nacos 注册中心记录了 Nacos 作为注册中心的使用方式,这节继续记录下Nacos作为配置中心的使用方式。本节使用的Spring Cloud版本为Hoxton.SR3,SpringCloud Alibaba 版本为 2.2.0.RELEASE,Spring Boot 版本为 2.2.3.RELEASE。

二、项目的搭建

我们将在我们 nacos-examples 的基础上,搭建一个 config-client,用来今天 nacos 配置中心的案例测试

2.1 创建 config-client 项目

使用 IDEA 创建一个 Maven 模块:

选择 Maven:

点击下一步:

Parent:选择 nacos-examples

Name:config-client

其他的项,保持默认。

点击 FINISH 完成创建的过程:


 

2.2 添加依赖

我们的项目继承自 nacos-examples,它里面已经包含 2 个基本的依赖:

  •  服务注册和发现:spring-cloud-alibaba-nacos-discovery 这个是微服务里面必不可缺的组件
  •  Web 开发相关:spring-boot-starter-web 开发 web 项目最基础的依赖

现在,我们在里面添加今天我们要学习的配置获取的组件:

spring-cloud-alibaba-nacos-config

编辑 config-client 里面的 pom.xml 文件,添加以下的内容:

<dependencies>
	<dependency>
		<groupId>com.alibaba.cloud</groupId>
		<artifactId>spring-cloud-alibaba-nacos-config</artifactId>
	</dependency>
</dependencies>

在添加一个 mavne 的打包插件:

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
	</plugins>
</build>

查看项目所有的依赖:

现在,项目里面已经包含上面的 3 个依赖了。

2.3 完整的 pom.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<parent>
		<artifactId>nacos-examples</artifactId>
		<groupId>com.bjsxt</groupId>
		<version>1.0</version>
	</parent>
	<modelVersion>4.0.0</modelVersion>
	<artifactId>config-client</artifactId>
	<dependencies>
		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-alibaba-nacos-config</artifactId>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

至此,项目的搭建完成了。

三、在 nacos-server 里面添加配置

相关的工作图,如图:

Nacos-client 会从 Nacos-Server 里面获取配置文件,首先,Nacos-Server 里面需要有配置文件才能获取。

新建如下所示的配置信息:

Data ID: nacos-config.properties
Group : DEFAULT_GROUP
配置格式: Properties
配置内容: user.name=nacos-config-properties
          user.age=90

打开 Nacos 的管理页面:

现在我们看见,里面还没有任何的配置信息。

点击:

让我们来新建一个配置项:

填写的表单如下:

点击发布,完成配置文件的发表任务:

返回后,配置信息已经发布成功:

四、获取配置信息

 

我们将演示在 config-client 里面获取上面我们写的 2 个配置信息

4.1 添加一个配置文件

文件名称为:


 

注意:不是 application.yml ,bootstrap.yml 比 application 有更高的优先级。

Idea 能自动的识别该文件的格式:

编辑该文件,添加以下内容:

server:
  port: 8070
spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config: # 指定配置中心的地址和配置中心使用的数据格式
        server-addr: localhost:8848
        file-extension: properties
application:
  name: config-client

配置说明:

server.port: 服务的运行端口

  • spring.cloud.nacos.discovery.server-addr: 注册中心地址
  • spring.cloud.nacos.config.server-addr: 配置中心地址
  • spring.cloud.nacos.config.file-extension: 配置中心的配置属性的数据格式
  • spring.application.name: 应用的名称

4.2 新建一个启动类

名称为:com.bjsxt.ConfigClientApplication

编辑该类:

@SpringBootApplication
@EnableDiscoveryClient
@RefreshScope
@RestController
public class ConfigClientApplication {
	@Value("${user.name}")
	private String userName ;
	@Value("${user.age}")
	private Integer userAge ;
	public static void main(String[] args) {
		SpringApplication.run(ConfigClientApplication.class,args) ;
	}
	/**
	* 获取配置文件里面用户的信息
	* @return
	*/
	@GetMapping("/user/info")
	public ResponseEntity<String> getUser(){
		return ResponseEntity.ok(String.format("从配置中心获取的信息为:user:%s,age:%s",userName,userAge)) ;
	}
}

说明:

@RefreshScope:代表配置文件是可以被刷新的

@Value:从 env 里面获取配置信息

4.3 启动测试

在浏览器里面输入:

http://localhost:8070/user/info

效果已经完成了。


五、获取配置规则

 

nacos 配置中心通过 namespace、dataId 和 group 来唯一确定一条配置。

  • Namespace:即命名空间。默认的命名空间为 public,我们可以在 Nacos 控制台中新建命名空间;
  • dataId:即配置文件名称
  • Group:即配置分组,默认为 DEFAULT_GROUP,可以通过 spring.cloud.nacos.config.group配置。

其中:dataId 是最关键的配置字段:格式如下:

${prefix} - ${spring.profiles.active} .${file-extension}

说明:

  • prefix 默 认 为 spring.application.name 的 值 , 也 可 以 通 过 配 置 项spring.cloud.nacos.config.prefix 来配置;
  • spring.profiles.active 即为当前环境对应的 profile。注意,当 spring.profiles.active 为空时,对应的连接符-也将不存在,dataId 的拼接格式变成${prefix}.${file-extension};
  • file-extension 为 配 置 内 容 的 数 据 格 式 , 可 以 通 过 配 置 项spring.cloud.nacos.config.file-extension 来配置。

这就是上面我们为什么能获得到配置的原因了。


六、配置划分实战

Nacos 配置中心的 namespace、dataId 和 group 可以方便灵活地划分配置。比如,我们现在有一个项目需要开发,项目名称为 bjsxt,项目开发人员分为两个组:GROUP_A 和 GROUP_B,

项目分为三个环境:开发环境 dev、测试环境 test 和生产环境 prod。

Bjsxt->GRUOR_A->dev

6.1 在 Nacos 控制台中新建一个名称为 bjsxt 的命名空间

点击新建命令空间

填写以下的内容:

点击确定,完成创建。

完成后,如图所示:

新建完成后:我们看见它自动帮我们生产了一个 ID:

8defab18-df88-49e5-b13e-526f89da87ad

记录该 ID 值。

6.2 在 Nacos 新建配置

切换完成后,点击 +:

填写以上的信息。点击发布:

完成后:

已经完成创建。

6.3 获取配置文件

修改 config-client 里的 bootstrap.yml 文件:

server:
  port: 8070
spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config: # 指定配置中心的地址和配置中心使用的数据格式
        server-addr: localhost:8848
        file-extension: yml #properties
        group: GROUP_A # 获取 GROUP_A 里面的配置
        namespace: 8defab18-df88-49e5-b13e-526f89da87ad # 命名空间,写 id的值
        #prefix: ${spring.application.name} # 前缀,默认为应用的名称,不需要修改
  application:
    name: config-client
    profiles:
      active: dev # 使用的 dev 环境的配置

6.4 重启 config-client 测试

浏览器访问:

http://localhost:8070/user/info

得到:

配置信息已经获取成功。


七、配置回滚

 

Nacos 中,修改配置点击发布后会创建一个对应的历史版本快照,我们可以在 Nacos 控制台的历史版本列表中找到这些快照。
 

7.1 动态刷新

该注解,可以刷新配置。故无需启动就能看见最新的配置信息。

7.2 修改配置文件

修改 user.name ,user.age:

点击发布。

出现对比页面:

点击确认发布:

然后点击返回。

7.3 历史版本的查询

可以看见修改的日期。

7.4 回滚

将配置信息回滚为之前的版本:

根据修改时间,我们将 12:38:53 的数据回滚为 12:25:12 的数据:

已经自动的展示回滚的内容了,点击回滚配置:

点击确认,完成回滚:

再次测试:

浏览器输入:

http://localhost:8070/user/info

已经回滚成功了:


八、获取多个配置

除了通过上面的方式指定一个唯一配置外,我们还可以同时获取多个配置文件的内容。

8.1 修改 config-client 里面的配置文件

server:
  port: 8070
spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        extension-configs: # 多个配置
          - dataId: test-a.yml
          group: DEFAULT_GROUP
          refresh: true
          - dataId: test-b.yml
          group: DEFAULT_GROUP
          refresh: false
	      # 指定配置中心的地址和配置中心使用的数据格式
	    # server-addr: localhost:8848
	    # file-extension: yml #properties
	    # group: GROUP_A # 获取 GROUP_A 里面的配置
	    # namespace: 8defab18-df88-49e5-b13e-526f89da87ad # 命名空间,写 id 的值
	    ## prefix: ${spring.application.name} # 前缀,默认为应用的名称,不需要修改
  application:
    name: config-client
    profiles:
      active: dev # 使用的 dev 环境的配置

说明:

  • spring.cloud.nacos.config.extension-configs[n].dataId,指定多个配置的 dataId,必须包含文件格式,支持 properties、yaml 或 yml;
  • spring.cloud.nacos.config.extension-configs[n].group,指定分组;
  • spring.cloud.nacos.config.extension-configs[n].refresh,是否支持刷新。

上 面 的 配 置 中 , 我 们 分 别 从 DEFAULT_GROUP 中 获 取 了 config-client-a.yml 和config-client-b.yml 配置内容,并且 config-client-a.yml 支持刷新,config-client-b.yml 不支持刷新。

注意:

没有 namespace 的配置,言外之意就是 Nacos 目前还不支持多个配置指定不同的命名空间。

8.2 在 Nacos 里面完成这 2 个配置文件的创建

config-client-a.yml:

切换 namespace:

点击 + 完成创建:

点击发布。

config-client-b.yml

完成后:

8.3 获取配置信息

重启 config-client,测试:

浏览器访问:


九、Spring Cloud Alibaba Nacos Config 常用的配置

配置项key默认值说明
服务端地址spring.cloud.nacos.config.server-addr  
DataId 缀spring.cloud.nacos.config.prefix spring.application.name
Groupspring.cloud.nacos.config.groupDEFAULT_GROUP 
dataID 缀及内容文件格式spring.cloud.nacos.config.file-extensionpropertiesdataId 的后缀,同时也是配置内容的文件格式,目前只支持properties
配置内容编码方式spring.cloud.nacos.config.encodeUTF-8配置的编码
获取配置超时时间spring.cloud.nacos.config.timeout3000单位为 ms
配置的命空间spring.cloud.nacos.config.namespace 常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源隔离等。
AccessKeyspring.cloud.nacos.config.access-key  
SecretKeyspring.cloud.nacos.config.secret-key  
相对路径spring.cloud.nacos.config.context-path 服务端 API 的相对路径
接入点spring.cloud.nacos.config.endpoint 地域的某个服务的入域名,通过此域名可以动态地拿到服务端地址
是否开启听和自动刷新spring.cloud.nacos.config.refresh.enabledtrue 


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

plenilune-望月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值