统一配置管理
如果一个服务有上千个实例,他们一个实例就要有一个配置文件,如果我们想要修改配置文件中的某一个部分,那么我们就需要逐个去修改每个实例的配置文件,毫无疑问这是麻烦的。
我们希望这些配置文件能够实现统一的管理,我们别逐个去修改,而是在一个地方改动就可以了,并且改动完成之后这个服务无需去做重启,这些配置立刻生效 --> 配置的热更新。
添加配置
Data ID命名:服务名称 + profile(当前项目运行环境dev | pro等) + 后缀名(.yaml)
配置内容不是一股脑的把所有配置都扔进来,而是应该放入一些会变化的,需要热更新的配置,比如数据库地址等是不需要变化的。此处大部分是书写【开关】类型的,或者【模板】类型等
比如日期的模板等
点击发布就发布完成了
现在我们将一部分配置文件放进了nacos中,那么我们需要在程序启动的时候就知道nacos的地址,Spring提供了一个bootstrap.yml的配置文件,这个文件的优先级比application.yml高,会优先读取bootstrap.yml信息,随后得到nacos地址信息,读取到nacos的配置文件,再和本地配置文件作整合。
配置操作
1、引入Nacos的配置管理客户端
<!--nacos配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2、在服务中的resource目录添加一个bootstarp.yml文件,这个文件是引导文件,优先级高于application.yml,名字一定要是bootstarp才可以
spring:
application:
name: userservice # 服务名称
profiles:
active: dev # 开发环境,这里是dev
cloud:
nacos:
server-addr: localhost:1224 # nacos地址
config:
file-extension: yaml # 文件后缀名
配置自动更新
Nacos中的配置文件变更后,微服务无需重启就可以感知。不过需要通过下面两种配置实现:
方式1:在@Value注入的变量所在类上添加注解@RefreshScope
方式2:Spring中还有另一种注解方式,即在类上加@ConfigurationProperties注解,可以完成配置的主动加载,只要前缀名 + 变量名和配置文件一致,就可以完成注入,这种方式不需要加入@RefreshScope注解就可以完成热更新
多环境配置共享
某些配置的值,在开发,测试,生产环境中是一样的,像这样的配置,在每个配置文件中都写就有些浪费了,并且改动的时候我需要在每个配置文件中都去改,显然是没有必要的。
微服务启动时会从nacos中读取多个配置文件:
我们新加入一个userservice.yaml文件,因为我们在bootStrap中的的配置是userservice-dev-yaml,因此userservice.yaml文件我们也可以读取到
配置文件优先级: