提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
目录
前言
提高上篇文章了解到nacos的服务注册和发现,今天来了解配置管理功能和集群
提示:以下是本篇文章正文内容,下面案例可供参考
一、Nacos实现配置管理
1:配置文件的读取(以user-service微服务为例)
先来了解一下我们的配置文件是如何获取的
以往我们的项目流程图是先读取配置文件application.yml再创建容器,但是现在多了一个nacos的配置文件,那么就有两个问题,我们去个文件读?又读取什么?
以往我们的nacos的地址存放再application.yml中,当加载完application.yml就开始创建容器了,所以就会导致即使知道了nacos的地址也无法继续读取nacos的配置,所以我们需要再application.yml读取前就得读取nacos的配置信息,因此我们新创建一个bootstrap.yml文件
这个文件是引导文件,读取优先级比application.yml要高,所以我们可以把nacos的地址存放进去,目前的流程图为
这样就可以使两个配置文件的信息合并然后创建spring容器了。
2:引导文件如何填写
接下来看看引导文件需要填写什么
spring:
application:
name: userservice # 服务名称
profiles:
active: dev # 开发环境,名字任意,这里是dev
cloud:
nacos:
server-addr: localhost:8848 # nacos地址
config:
file-extension: yaml # 文件后缀
# name+active+file-extension: 刚好组成了nacos配置文件的id
# 所以可以在nacos中找到配置文件
由代码可以看到,在里面填写的是配置文件的id和nacos的地址 ,application.yml重复的配置可以注释(这里涉及到配置文件信息的优先度,下文会讲到)
2:创建配置文件
接下来我们进入nacos中创建对应了配置文件信息
一般id的格式为 服务名称-配置环境.文件后缀
如:userservice-dev.yaml
这里我填写
这样我们的nacos的配置文件就填写好了
二、Nacos配置文件的拉取
创建一个 Nacos的配置文件读取类
使用注解
@ConfigurationProperties(prefix = "pattern" )读取配置文件中前缀以pattern开头的属性
目前本人只能读取有前缀的属性
在类中创建变量,变量名要和配置文件中的名字相同
在user-service的控制层中注入配置文件和测试方法
@Autowired
private NacosConfig nacosConfig;
//检验是否读取到nacos的配置信息
@GetMapping("now")
public String now(){
// return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat))+name;
// 第二种配置热部署方法 建立配置类管理,@ConfigurationProperties会自动刷新
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(nacosConfig.getDateformat()))+nacosConfig.toString();
}
访问方法后发现成功读取到nacos配置文件的信息
三、Nacos多环境配置
谈到段环境配置要先了解一下环境概念
spring:
application:
name: userservice # 服务名称
profiles:
active: dev # 开发环境,这里是dev
cloud:
nacos:
server-addr: localhost:4960 # nacos地址
config:
file-extension: yaml # 文件后缀
# name: active: file-extension: 刚好组成了nacos配置文件的id
# 所以可以在nacos中找到配置文件
在我们的引导文件中有
profiles: active: dev # 开发环境,这里是dev
的属性,这是设置环境的代码,常见的有test,dev等等,这些环境的配置方便我们处于项目其他时间段的开发
那么我们如果想要一个配置文件,所有环境都可以读取要怎么做呢?
先来看一下我们是如何加载nacos的配置文件的
启动微服务
10-29 18:53:44:112 INFO 40792 --- [ main] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-userservice-dev.yaml,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-userservice.yaml,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-userservice,DEFAULT_GROUP'}]
不难看出,当我们启动微服务的同时,它加载了两个个配置文件,分别是
userservice-dev.yaml
userservice.yaml
而userservice-dev.yaml是我们处于dev环境的配置文件,从引导文件可以看出
我们是要读取userservice-dev.yaml
而userservice.yaml正好是适用于多环境的配置文件
所以我们只需要在nacos中多建立一个uservice.yml的配置文件即可。
那么这么多配置文件,他们的属性优先度是如何的呢?
不难看出userservice-dev.yaml的优先度最大,可以自行测试一下,这里不多展示
四:Nacos集群搭建
目前踩到的坑是,nginx的端口一定不要冲突!
以及不知道什么原因集群后nacos的热更新就失效了TT
五、Springcloud使用Nacos集群的工作流程图
总结
以上是nacos的一些学习。