(四)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 配置中心(含案例源码及案例解析)_第1张图片

使用 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。

二、项目的搭建

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第2张图片

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

2.1 创建 config-client 项目

使用 IDEA 创建一个 Maven 模块:

选择 Maven:
(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第3张图片

点击下一步:

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第4张图片

Parent:选择 nacos-examples

Name:config-client

其他的项,保持默认。

点击 FINISH 完成创建的过程:

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第5张图片
 

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 文件,添加以下的内容:


	
		com.alibaba.cloud
		spring-cloud-alibaba-nacos-config
	

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


	
		
			org.springframework.boot
			spring-boot-maven-plugin
		
	

查看项目所有的依赖:
(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第6张图片

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

2.3 完整的 pom.xml 文件



	
		nacos-examples
		com.bjsxt
		1.0
	
	4.0.0
	config-client
	
		
			com.alibaba.cloud
			spring-cloud-alibaba-nacos-config
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	

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

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

相关的工作图,如图:

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第7张图片

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

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

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

打开 Nacos 的管理页面:

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第8张图片

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

点击:

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第9张图片

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

填写的表单如下:

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第10张图片

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

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第11张图片

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

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第12张图片

四、获取配置信息

 

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

4.1 添加一个配置文件

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第13张图片

文件名称为:

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第14张图片
 

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

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

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第15张图片

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

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 新建一个启动类

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第16张图片

名称为:com.bjsxt.ConfigClientApplication

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第17张图片

编辑该类:

@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 getUser(){
		return ResponseEntity.ok(String.format("从配置中心获取的信息为:user:%s,age:%s",userName,userAge)) ;
	}
}

说明:

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

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

4.3 启动测试

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第18张图片

在浏览器里面输入:

http://localhost:8070/user/info

效果已经完成了。

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第19张图片
五、获取配置规则

 

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 来配置。

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


六、配置划分实战

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第20张图片

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

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

Bjsxt->GRUOR_A->dev

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

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第21张图片

点击新建命令空间

填写以下的内容:

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第22张图片

点击确定,完成创建。

完成后,如图所示:

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第23张图片

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

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

记录该 ID 值。

6.2 在 Nacos 新建配置

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第24张图片

切换完成后,点击 +:

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第25张图片

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

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第26张图片

完成后:

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第27张图片

已经完成创建。

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 环境的配置

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第28张图片

6.4 重启 config-client 测试

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第29张图片

浏览器访问:

http://localhost:8070/user/info

得到:

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第30张图片

配置信息已经获取成功。


七、配置回滚

 

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

7.1 动态刷新

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第31张图片

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

7.2 修改配置文件

修改 user.name ,user.age:

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第32张图片

点击发布。

出现对比页面:

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第33张图片

点击确认发布:

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第34张图片

然后点击返回。

7.3 历史版本的查询

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第35张图片

可以看见修改的日期。

7.4 回滚

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

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第36张图片

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

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第37张图片

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

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第38张图片

点击确认,完成回滚:

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第39张图片

再次测试:

浏览器输入:

http://localhost:8070/user/info

已经回滚成功了:

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第40张图片
八、获取多个配置

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

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:

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第41张图片

点击 + 完成创建:

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第42张图片

点击发布。

config-client-b.yml

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第43张图片

(四)Spring Cloud Alibaba Nacos Config 配置中心(含案例源码及案例解析)_第44张图片

完成后:

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
Group spring.cloud.nacos.config.group DEFAULT_GROUP  
dataID 缀及内容文件格式 spring.cloud.nacos.config.file-extension properties dataId 的后缀,同时也是配置内容的文件格式,目前只支持properties
配置内容编码方式 spring.cloud.nacos.config.encode UTF-8 配置的编码
获取配置超时时间 spring.cloud.nacos.config.timeout 3000 单位为 ms
配置的命空间 spring.cloud.nacos.config.namespace   常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源隔离等。
AccessKey spring.cloud.nacos.config.access-key    
SecretKey spring.cloud.nacos.config.secret-key    
相对路径 spring.cloud.nacos.config.context-path   服务端 API 的相对路径
接入点 spring.cloud.nacos.config.endpoint   地域的某个服务的入域名,通过此域名可以动态地拿到服务端地址
是否开启听和自动刷新 spring.cloud.nacos.config.refresh.enabled true  


 

你可能感兴趣的:(Spring,Cloud,Alibaba技术栈)