本文共 5010 字,大约阅读时间需要 16 分钟。
SpringCloud(五):服务配置中心-Nacos【Finchley版】
为什么需要配置中心?
为什么需要配置中心?主要可以从一下两方面去思考:
- 在分布式系统中,你的系统都是集群化部署的,几台、十几台、成百上千台,如果不使用配置中心将配置统一管理,当有一个改动的时候,你需要登录到一台一台机器上逐一修改,几台机器还好,成百上千台机器的话,这画面有点可爱了。所以这是使用配置中心的原因之一。
- 有时候我们会在代码里写一些常量,改动的概率很小,但是也有可能改动,在代码中硬编码可能不太合适。将这些变量移入到配置中心,可以解决硬编码的问题。
使用 Nacos 作为配置中心
我们先启动 nacos 服务,进入到 nacos 的控制台,来创建配置信息。
创建配置
官方文档上说明命名空间用来区分不同环境的配置信息,开发环境、测试环境、生产环境等,所以我们安装官方文档来,先创建Dev
、Test
、Prod
这三个命名空间,分别新增user-server.yaml
配置信息。
active.profile
配置,值就自己定义,能区别就行。参数说明一下: - Data ID data ID采用的是
${spring.application.name}-${spring.profiles.active}.${file-extension:properties}
这种格式,当${spring.profiles.active}
没有设置的时候就是${spring.application.name}.${file-extension:properties}
格式。我们设置的为user-server.yaml
,我们没有设置${spring.profiles.active}
的值,不要被中间的-
误导了,我们的应用名${spring.application.name}=user-server
,${file-extension}=yaml
- Group 不修改,使用默认值DEFAULT_GROUP
- 配置格式 Data ID中的
${file-extension}
的值 - 配置内容 配置信息,我们以前在
springboot
里面的application.yaml
的内容全部移到这里
创建应用
我们创建一个nacos-config-server
项目,对项目进行如下改造
1、pom.xml
在pom.xml
中引入nacos-config
的依赖
org.springframework.cloud spring-cloud-starter-alibaba-nacos-config 0.2.2.RELEASE
2、创建ConfigController
@RestController// 自动刷新配置@RefreshScopepublic class ConfigController { @Value("${active.profile:''}") String activeProfile; @Value("${ext.profile:''}") String extValue; @GetMapping("/active-profile") public String activeProfile(){ return activeProfile; } @GetMapping("/ext-config") public String extValue(){ return extValue; }}
3、创建bootstrap.properties
这次我们不在resource
下面创建application.yaml
文件了,而是创建bootstrap.properties
,注意这个地方一定不能错,一定要叫bootstrap.properties
。填入如下值:
# 服务端口server.port=8089# 应用名,与 nacos 配置服务器要一致spring.application.name=user-server#nacos 配置服务器地址spring.cloud.nacos.config.server-addr=127.0.0.1:8848# 文件扩展名,与 nacos 配置服务器要一致spring.cloud.nacos.config.file-extension=yaml# 方法一 通过命名空间来区分不同环境,值在 nacos 服务器上获取。spring.cloud.nacos.config.namespace=01ea0d93-7252-44f2-8e18-deb9f35519ca
启动nacos-config-server
服务器,在浏览器中访问http://127.0.0.1:8089/active-profile
,将显示:
test-profile
上面的spring.cloud.nacos.config.namespace
设置的是test
环境的值,所以读取的是test
里面的内容
加载不同环境的配置信息
在开发springboot
项目的时候,我们一般会建立三个配置文件,来区分不同环境的配置信息,那nacos
中是如下区分的呢?
方法一
建立不同的命名空间,通过命名空间来区分不同环境的配置信息,然后在bootstrap.properties
里面设置spring.cloud.nacos.config.namespace
为对应的值就可以加载不同环境的配置信息。
方法二
因为Data ID
的格式为${spring.application.name}-${spring.profiles.active}.${file-extension:properties}
,所以我们也可以像springboot
一样,通过设置spring.profile.active
来加载不同环境的配置信息,这个就需要将不同环境的配置文件建立在nacos
的同一个命名空间下面,比如我们在public
命名空间下面建立user-server-prod.yaml
、user-server-test.yaml
两个配置信息。我们先来获取test
环境的配置信息,我们将bootstrap.properties
修改成:
server.port=8089spring.application.name=user-serverspring.cloud.nacos.config.server-addr=127.0.0.1:8848spring.cloud.nacos.config.file-extension=yaml# 方法一 通过命名空间来区分不同环境# spring.cloud.nacos.config.namespace=01ea0d93-7252-44f2-8e18-deb9f35519ca# 方法二 通过 spring.profiles.active 的值来区分配置文件spring.profiles.active=test
重启服务器,访问http://127.0.0.1:8089/active-profile
,返回
test-profile
我们将spring.profiles.active
改成prod
,重启服务器,再次访问http://127.0.0.1:8089/active-profile
,返回
prod-profile
这样也实现了加载不同环境的配置信息,如果用这种方式来加载不同环境的配置信息,我觉得可能需要将项目名作为命名空间会合适一些,官方说明的是通过命名空间来加载不同环境的配置信息,不知道是不是因为这种方式有问题,所以大家还是安装官方的来使用命名空间来加载不同环境的配置信息。
加载多配置文件
我们有时候项目可能不止一个配置文件,会有多个配置文件,比如日志的配置信息文件之类的,那在nacos
中如何加载多配置文件呢?在nacos
中也有两种方法来实现
方法一
利用ext-config
来实现,ext-config
是一个数组,我们可以利用它来加载其他配置文件,大概使用方式如下:
#需要加载的配置文件data idspring.cloud.nacos.config.ext-config[0].data-id=ext-config.yamlspring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP# 是否自动更新配置信息spring.cloud.nacos.config.ext-config[0].refresh=truespring.cloud.nacos.config.ext-config[1].data-id=ext1-config.yamlspring.cloud.nacos.config.ext-config[1].group=DEFAULT_GROUPspring.cloud.nacos.config.ext-config[1].refresh=true
其中ext-config[1]
的数字越大,权重越高,会被优先加载
方法二
利用贡献配置文件的方式来加载多个配置
# 需要加载的配置文件data id,多个用,隔开#spring.cloud.nacos.config.shared-dataids=ext-config.yaml# 需要自动同步的配置文件#spring.cloud.nacos.config.refreshable-dataids=ext-config.yaml
上面两种方法都可以实现加载多个配置文件,我们用第一中为例,在test
环境下添加一个ext-config.yaml
的配置信息,添加一条配置项ext.profile: 我是另一个配置文件
,将bootstrap.properties
修改成:
server.port=8089spring.application.name=user-serverspring.cloud.nacos.config.server-addr=127.0.0.1:8848spring.cloud.nacos.config.file-extension=yaml# 方法一 通过命名空间来区分不同环境spring.cloud.nacos.config.namespace=01ea0d93-7252-44f2-8e18-deb9f35519ca# 方法二 通过 spring.profiles.active 的值来区分配置文件# spring.profiles.active=prod# 方法一 通过ext-config来加载多项配置 [n] n越大权重越高,优先加载spring.cloud.nacos.config.ext-config[0].data-id=ext-config.yamlspring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUPspring.cloud.nacos.config.ext-config[0].refresh=true# 方法二 通过共享配置文件来加载配置信息#spring.cloud.nacos.config.shared-dataids=ext-config.yaml#spring.cloud.nacos.config.refreshable-dataids=ext-config.yaml
重新启动服务,我们先访问http://127.0.0.1:8089/active-profile
,我们将得到跟上面一样的结果,说明没有影响我们加载主配置文件,我们在访问http://127.0.0.1:8089/ext-config
,我们将得到
我是另一个配置文件
加载多个配置文件也成功了!
Demo 源码
参考文档
转载地址:https://blog.csdn.net/z694644032/article/details/97030162 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!