Spring cloud alibaba--Nacos Config配置管理

目录

1.Nacos配置中心使用

 1.1快速开始

 1.2历史版本

​ 1.3创建命名空间

1.4克隆配置文件

1.5创建用户

 1.6创建角色给用户绑定某个角色 

1.7给角色绑定读写权限

 1.8若要开启权限配置,需要在nacos中进行配置

 2.Spring cloud 获取Nacos Config配置中心的配置信息

3. Nacos Config其它扩展

3.1文件扩展名

 3.2动态感知配置变化

3.3可支持profile粒度的配置

3.4命名空间配置

3.5支持自定义Group配置

3.6支持自定义Data id

 4.注解@RefreshScope获取最新配置值


启动Nacos后,可以通过服务管理界面配置Nacos

Spring cloud alibaba--Nacos Config配置管理_第1张图片

1.Nacos配置中心使用

 1.1快速开始

准备配置,nacos server中创建nacos-config.properties

Spring cloud alibaba--Nacos Config配置管理_第2张图片

Spring cloud alibaba--Nacos Config配置管理_第3张图片 Data id:Nacos某个配置集的ID,通常采用java包(com.taobao.tc.refund.log.level)的命名规则保证全局的唯一性,此命名规则非强制。

Spring cloud alibaba--Nacos Config配置管理_第4张图片

Spring cloud alibaba--Nacos Config配置管理_第5张图片

nacos数据表中可以查看到记录

Spring cloud alibaba--Nacos Config配置管理_第6张图片

 1.2历史版本

编辑配置

Spring cloud alibaba--Nacos Config配置管理_第7张图片

Spring cloud alibaba--Nacos Config配置管理_第8张图片

 查看历史版本

Spring cloud alibaba--Nacos Config配置管理_第9张图片

Spring cloud alibaba--Nacos Config配置管理_第10张图片 1.3创建命名空间

Spring cloud alibaba--Nacos Config配置管理_第11张图片

1.4克隆配置文件

有多个工作空间的情况下,可以克隆配置文件

Spring cloud alibaba--Nacos Config配置管理_第12张图片

1.5创建用户

Spring cloud alibaba--Nacos Config配置管理_第13张图片

 1.6创建角色给用户绑定某个角色 

Spring cloud alibaba--Nacos Config配置管理_第14张图片

1.7给角色绑定读写权限

Spring cloud alibaba--Nacos Config配置管理_第15张图片

此时使用zhangsan这个用户登录,只能操作dev的可读权限

Spring cloud alibaba--Nacos Config配置管理_第16张图片

在dev工作空间下,新建也是会报错

Spring cloud alibaba--Nacos Config配置管理_第17张图片

 1.8若要开启权限配置,需要在nacos中进行配置

在nacos的目录conf/application.properties中设置nacos.core.auth.enabled的值为true,默认是false

Spring cloud alibaba--Nacos Config配置管理_第18张图片

 2.Spring cloud 获取Nacos Config配置中心的配置信息

(1)创建新的maven项目,编写启动类

Spring cloud alibaba--Nacos Config配置管理_第19张图片

 (2)pom.xml中加入需要的依赖



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

(3)在resources目录下,必须使用bootstrap.properties配置文件来配置Nacos Server 地址

#服务启动名,必须与nacos config中配置的Data id保持一致
spring.application.name=nacos-config
#nacos config 服务地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8849

 (4)在spring boot启动类中通过加载到spring容器中的属性文件获取值

@SpringBootApplication
public class NacosConfigApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args);
        //从spring容器中的环境全局变量值中,根据属性获取值
        String userName = applicationContext.getEnvironment().getProperty("user.name");
        String userAge = applicationContext.getEnvironment().getProperty("user.age");
        System.err.println("user name :"+userName+";age:"+userAge);

    }
}

 (5)启动服务器,控制台报get data from Nacos error,dataId:nacos-config.properties 

com.alibaba.nacos.api.exception.NacosException错误,配置中心中找不到nacos-config的配置文件。

Spring cloud alibaba--Nacos Config配置管理_第20张图片

 原因是Nacos config中没有Data Id为Nacos-config的配置

Spring cloud alibaba--Nacos Config配置管理_第21张图片

 (6)把bootstrap.properties中的spring.application.name设置成与Data ID对应的命名,再此启动程序,控制台还是报错,找不到配置文件。

Spring cloud alibaba--Nacos Config配置管理_第22张图片

 当我们需要进行权限设置的时候,nacos.core.auth.enabled=true,此时必须要配置nacos的连接信息;nacos.core.auth.enabled=false时,可以不配置nacos的连接信息和工作空间,默认工作空间是public,默认用户名密码都是nacos。

Spring cloud alibaba--Nacos Config配置管理_第23张图片

 在bootstrap.properties中配置nacos的连接信息:

Spring cloud alibaba--Nacos Config配置管理_第24张图片

 ***注意一定要在bootstrap.properties中配置,若是在application.properties中配置,则获取不到配置信息,获取到的用户名是电脑名称

Spring cloud alibaba--Nacos Config配置管理_第25张图片

 (7)启动程序,获取到配置信息

Spring cloud alibaba--Nacos Config配置管理_第26张图片

Spring cloud alibaba--Nacos Config配置管理_第27张图片

 (8)当Nacos Config变动后,会重新生成Data id 的md5值,一旦修改了配置信息,nacos客户端可以动态感知到修改。

当前MD5值:

Spring cloud alibaba--Nacos Config配置管理_第28张图片

 修改后md5值:

Spring cloud alibaba--Nacos Config配置管理_第29张图片

3. Nacos Config其它扩展

3.1文件扩展名

默认使用properties的方式,此时获取配置信息不需要做任何配置 

Spring cloud alibaba--Nacos Config配置管理_第30张图片

 若是修改为YAML的方式

Spring cloud alibaba--Nacos Config配置管理_第31张图片

 控制台获取不到配置信息

Spring cloud alibaba--Nacos Config配置管理_第32张图片

 在bootstrap.properties配置文件中修改扩展名为yaml

#nacos客户端默认是properties的文件扩展名(只针对默认配置和profile配置)
spring.cloud.nacos.config.file-extension=yaml

此时控制台获取到配置信息

Spring cloud alibaba--Nacos Config配置管理_第33张图片

 3.2动态感知配置变化

nacos config配置变化,客户端是可以动态感知到配置变化的;关闭动态配置变化可以在bootstrap.properties中设置:

#关闭nacos 动态刷新功能
spring.cloud.nacos.config.refresh-enabled=false

3.3可支持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}这个配置项配置选择哪个配置

#选择加载的文件为application-dev.properties
spring.profiles.active=dev

默认配置文件:跟服务名spring.application.name相同的DataId的配置文件,称之为默认配置文件

Spring cloud alibaba--Nacos Config配置管理_第34张图片

 Spring cloud alibaba--Nacos Config配置管理_第35张图片

 只有默认的配置文件才能结合profile使用;除了默认配置文件,其它配置文件都需要写上后缀。

创建一个com.qingyun.order默认配置文件的profile文件:com.qingyun.order-dev.properties

Spring cloud alibaba--Nacos Config配置管理_第36张图片

后缀必须跟配置的 boostrap.properties中配置扩展名一致: 

Spring cloud alibaba--Nacos Config配置管理_第37张图片

在application.properties中配置激活的配置文件

Spring cloud alibaba--Nacos Config配置管理_第38张图片

 控制台获取配置信息,此时user name 值来自com.qingyun.order-dev.properties配置中,age值来自com.qingyun.order默认配置中。

Spring cloud alibaba--Nacos Config配置管理_第39张图片

 从结果可以看出配置文件的优先级:profile > 默认配置  优先级大的会覆盖优先级小的,并且会行车互补。

3.4命名空间配置

(1)创建命名空间

Spring cloud alibaba--Nacos Config配置管理_第40张图片

 (2)配置文件中配置使用哪个命名空间

#nacos discovery工作空间
spring.cloud.nacos.config.workspace=dev

3.5支持自定义Group配置

在没有明确指定${spring.cloud.nacos.config.group}配置的情况下,默认使用DEFAULT_GROUP,需要自己定义group可以在配置中添加

spring.cloud.nacos.config.group=test-group

该配置值一定要放在boostrap.properties中,所有涉及到nacos config的配置都需要放到boostrap.properties中。页面配置的Group一定要和spring.cloud.nacos.config.group种一致

Spring cloud alibaba--Nacos Config配置管理_第41张图片

相同的命名空间下,可以存在data id相同,Group不同的配置

3.6支持自定义Data id

默认读取的配置文件是与服务名相同的data id的配置;若是还有其它公共的配置需要读取进来,就涉及到多个data id的读取。

新建一个公共的配置com.qingyun.comm.properties 

Spring cloud alibaba--Nacos Config配置管理_第42张图片

创建第二个公共的配置com.qingyun.comm02.properties

Spring cloud alibaba--Nacos Config配置管理_第43张图片

在配置文件中引入dataid 的方式有两种:

①使用shared-configs按数组的方式引入配置,设置data_id、group、refresh值

# 配置支持共享的 Data Id
spring.cloud.nacos.config.shared-configs[0].data-id=com.qingyun.comm.properties
# 配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUP
# 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false
spring.cloud.nacos.config.shared-configs[0].refresh=true

# 配置支持共享的 Data Id
spring.cloud.nacos.config.shared-configs[1].data-id=com.qingyun.comm02.properties
# 配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[1].group=DEFAULT_GROUP
# 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false
spring.cloud.nacos.config.shared-configs[1].refresh=true

 从打印结果可以看出优先级:profile > 默认 >shared-configs引入;shared-configs数组中后面引入的会覆盖前面引入的相同项。

Spring cloud alibaba--Nacos Config配置管理_第44张图片

 ②使用extension-configs按数组的方式引入配置,设置data_id、group、refresh值

# 配置支持共享的 Data Id
spring.cloud.nacos.config.extension-configs[0].data-id=com.qingyun.comm03.properties
# 配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP
spring.cloud.nacos.config.extension-configs[0].group=DEFAULT_GROUP
# 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false
spring.cloud.nacos.config.extension-configs[0].refresh=true

新建com.qingyun.comm03.properties

Spring cloud alibaba--Nacos Config配置管理_第45张图片

 此时控制台打印结果,可以看出优先级:profile > 默认 >extension-configs(数组下标越大优先级越大)>shared-configs(数组下标越大优先级越大);

Spring cloud alibaba--Nacos Config配置管理_第46张图片

 4.注解@RefreshScope获取最新配置值

项目中使用注解@Value获取配置属性值,当值变化时获取不到最新的值。

写一个Controller控制层,注入Nacos config配置的属性user.name

@RestController
@RequestMapping("/config")
public class ConfigController {


    @Value("${user.name}")
    String userName;

    @RequestMapping("/userName")
    public String userName(){
        return userName;
    }
}

浏览器中访问接口时,获取到的值是com.qingyun.order-dev.properties(优先级最高)定义的值。

Spring cloud alibaba--Nacos Config配置管理_第47张图片

Spring cloud alibaba--Nacos Config配置管理_第48张图片

 当编辑user.name的值时,再获取数据,依然是

Spring cloud alibaba--Nacos Config配置管理_第49张图片

Spring cloud alibaba--Nacos Config配置管理_第50张图片

 想要获取到最新修改的值,需要在Controller控制层添加注解@RefreshScope

Spring cloud alibaba--Nacos Config配置管理_第51张图片

 此时修改user.name值时,再获取可以获取到最新的值

Spring cloud alibaba--Nacos Config配置管理_第52张图片

Spring cloud alibaba--Nacos Config配置管理_第53张图片

加入@RefreshScope之后能获取到最新数据的原理:

     RefreshScope是scope的扩展,当类加了@RefreshScope后,在bean工厂加载时,会加入到refresh scope缓存的bean中,后续获取bean的时候优先从这个缓存bean中获取;当配置中心发生变更,会把变更的配置更新到spring容器的Environment中,并把refresh scope的缓存bean清空,当下载再访问此bean时,会再次走bean的生命周期,从Environment中获取到最新的值。

Spring cloud alibaba--Nacos Config配置管理_第54张图片

你可能感兴趣的:(spring,cloud,nacos,config,nacos,config,spring,cloud,RefreshScope,优先级,bootstrap)