Nacos配置文件管理、微服务获取Nacos配置文件、热更新、配置共享、配置优先级等
传统项目中,当我们需要修改配置文件时,需要修改配置文件,停掉服务,重启服务,这样不利于提升用户体验;
而使用Nacos进行项目的配置文件管理,则可以实现热更新配置文件,在Nacos中修改之后,Nacos会通知项目新的配置文件。
添加配置文件
第一步,点击添加配置:
第二步,配置信息
注意:不是所有的配置都写到Nacos中,只建议把那些可能会出现变化的配置写入Nacos,比如说:某活动是否开启(true/false)、日期格式模板(yyyymmdd/yyyy-mm-dd)等,
而不需要写入Nacos管理的配置比如:数据库地址、自身服务名等
微服务获取Nacos中的配置
我们在Nacos中配置了配置文件,那我们的项目在运行时,如何去获取呢?
在以前不使用Nacos进行配置管理时,是使用这样的流程,读取配置文件;那我们在使用Nacos后,我们要什么时候去读取,以什么方式读取Nacos中的文件呢?
我们的项目会在读取本地配置文件application.yml之前,去读取Nacos中的配置,然后读取本地配置,再进行合并;
那么此时有一个问题:我Nacos的地址写在application.yml中,我们如何在读取本地配置文件之前,去访问Nacos地址,读取到Nacos中的配置呢?
答案是使用bootstrap.yml。在springboot中,bootstrap.yml的优先级高于application.yml,所有系统会在加载完bootstrap.yml中的配置之后,读取到Nacos的地址,访问Nacos,获取配置文件,再读取application.yml中的配置信息,进行合并。
我们在Nacos中配置日期格式字符串,进行验证:
第一步,引入Nacos客户端(config)依赖
第二步,在bootstrap.yml中写好本服务名称、开发环境、Nacos地址、文件后缀名,系统将会组合好这些信息去Nacos中获取配置文件
第三步,测试是否能够获取Nacos中配置的日期格式
服务启动,访问控制层,获取日期格式成功并按格式返回结果,证明获取Nacos中配置文件成功
注意:如果配置了命名空间,也需要配置命名空间
Nacos配置文件热更新
Nacos的好处之一就是可以实现配置文件热更新,那么我们要如何来实现项目启动后,还可以热更新配置文件呢?
共有两种方式:
第一种,在使用Nacos中配置文件的地方,加上@RefreshScope注解,即可实现热更新。
比如:Nacos修改完配置文件之后,只需刷新前端页面,即可获得最新配置
第二种方式:添加配置类,在配置类上加注解@configrationproperties注解,使其注入到spring容器之中,即可实现热更新
示例:
更新前:
修改日期格式为yyyy年mm月dd日,点击发布:
不用重启,直接刷新页面,即可取得最新配置值:
配置共享
在实际开发中,有很多配置项是在Dev(Develpment )开发环境,sit(System Integration Test )系统集成测试,uat(User Acceptance Test)用户验收测试,等多种环境都用到的配置项;
这种配置项如果在每个环境的配置都写一遍,很麻烦不说,万一要修改起来,也要一个个地改。
那么有没有一种方法,可以实现这样的重复配置,集中放在一个地方,一个配置文件中呢?修改时只需修改这一个地方,所有的环境中调用这个配置的地方都能得到这个值呢?
这就是我们的配置共享:
userservice-dev.yml是环境配置文件,对应不同的开发环境
而userservice.yml就是共享配置文件,各种环境都能读取到,不用再每个配置文件中再写一遍
注意:当我们项目中的配置文件(本地配置)、Nacos中的共享配置、Nacos的环境配置(如dev、uat等配置 )都配置了一项属性,那么在项目启动后,会优先读取哪里的配置呢?
答案:Nacos环境配置(dev、sit、uat等)>远端共享配置>本地配置
也就是说,如果Nacos环境配置文件、Nacos共享配置文件、项目的本地配置文件都有相同的配置属性,那么项目访问的时候,优先使用Nacos环境配置文件,其次是共享配置,最后是本地配置
更多推荐
所有评论(0)