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

1.Nacos配置中心使用

 1.1快速开始

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

 Data id:Nacos某个配置集的ID,通常采用java包(com.taobao.tc.refund.log.level)的命名规则保证全局的唯一性,此命名规则非强制。

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

 1.2历史版本

编辑配置

 查看历史版本

 1.3创建命名空间

1.4克隆配置文件

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

1.5创建用户

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

1.7给角色绑定读写权限

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

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

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

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

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

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

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

<!--nacos config依赖-->
<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

(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的配置文件。

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

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

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

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

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

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

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

当前MD5值:

 修改后md5值:

3. Nacos Config其它扩展

3.1文件扩展名

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

 若是修改为YAML的方式

 控制台获取不到配置信息

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

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

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

 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的配置文件,称之为默认配置文件

 

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

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

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

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

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

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

3.4命名空间配置

(1)创建命名空间

 (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种一致

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

3.6支持自定义Data id

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

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

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

在配置文件中引入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数组中后面引入的会覆盖前面引入的相同项。

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

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

 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(优先级最高)定义的值。

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

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

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

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

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

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值