nacos2.3.1配置中心
文章目录
前言
接着上一个博客SpringBoot整合Nacos2.3.1讲一下nacos作为配置中心,2020年的时候学习过nacos,还以为很快就能上手呢,没想到磨磨蹭蹭还是折腾了好大一会,接下来这篇文章可能会有几个坑,但是内容还是完整的。希望有解决办法的同学和我讨论讨论。
提示:以下是本篇文章正文内容,下面案例可供参考
一、基础概念
首先说一下基础概念(欢迎指出不同的意见),虽然有点啰嗦,但是还是很有必要的
1、命名空间
命名空间(Namespace)是Nacos中的一个重要概念,它可以帮助我们对配置和服务进行分类管理和隔离。每个命名空间都是一个独立的环境,可以有自己的配置和服务。通过使用命名空间,我们可以在同一个Nacos实例上创建多个独立的环境,方便地进行配置和服务的管理。(一个命名空间对应一个服务)
2、分组(Group)
在实际开发中,我们通常会有多个环境,比如开发环境、测试环境和生产环境等。通过使用命名空间,我们可以将不同环境的配置和服务进行隔离,避免相互干扰。(一个分组对应一个环境)
总结:Nacos 中的服务是由三元组唯一确定的:namespace、group 与服务名称 service。 namespace 与 group 的作用是相同的,用于划分不同的区域范围,隔离服务。不同的是, namespace 的范围更大,不同的 namespace 中可以包含相同的 group。不同的 group 中可以 包含相同的 service。namespace 的默认值为 public,group 的默认值为 DEFAULT_GROUP。
3、权限控制
权限控制在实际应用中,我们可能需要对不同的用户或者角色进行权限控制。通过使用命名空间,我们可以为不同的用户或者角色分配不同的命名空间,从而实现权限控制。
点击权限管理
添加权限
添加自己需要配置的权限,绑定用户即可
4、extension-configs:
Nacos在配置路径spring.cloud.nacos.config.extension-config下,允许我们指定⼀个或多个额外配置。
5、shared-configs:
Nacos在配置路径spring.cloud.nacos.config.shared-configs下,允许我们指定⼀个或多个共享配置。
6、加载顺序
当前服务配置、共享配置与扩展配置的加载顺序为:共享配置,扩展配置,当前服务配置。若在三个配置中具有相同属性设置,但它们具有不同的值,那么,后加载的会将先加载的给覆盖。即这三类配置的优先级由低到高是:共享配置,扩展配置,当前服务配置
二、引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
三、application.yml
首先我会创建一个search类型的命名空间,下面创建三个配置文件,分别对应两个分组,testconfig.yml配置文件用来测试动态刷新的,一会会截图演示一下
#新版之后没有bootstrap.yml
spring:
profiles:
active: ${active} #区分环境 <如果这里看不懂可以留言>
config:
import:
# - optional:nacos:${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
- nacos:dcxh-search-${active}.yml?refreshEnabled=true&group=${active}
- nacos:elasticsearch-extension.yml?refreshEnabled=true&group=extension
application:
name: dcxh-search
cloud:
nacos:
config: #配置中心
server-addr: 127.0.0.1:8848
file-extension: yml
username: nacos
password: nacos
#NacosConfigPropertiesextensionConfigs
# ext-config:
namespace: a022a0f5-656e-4790
# group: ${active}
extension-configs:
- data-id: dcxh-search-dev
group: dev
refresh: true
shared-configs:
- data-id: elasticsearch-extension
group: extension
refresh: true
//在springboot >= 2.4.0版本,已经不使用bootstrap.yml作为启动配置文件了,所以在在application.yml中配置nacos的时候必须引入 config.import参数
config:
import:
- nacos:dcxh-search-dev.yml?refreshEnabled=true&group=dev //dcxh-search-dev.yml是nacos中的配置文件
如果config.import不设置会报以下错误错:Add a spring.config.import=nacos: property to your configuration.
这里我遇到了一个很奇怪的问题,搞了半天无法决绝
在application.yml中起到决定性作用的是- nacos:elasticsearch-extension.yml?refreshEnabled=true&group=extension,这个参数,比如去掉group参数之后下面 extension-configs:中的分组参数就补气作用了,因为还没来得及看源码,所以目前还不知道怎么回事,
如果有解决方法麻烦请留言。
四、bootstrap.yml
前面说了springboot >= 2.4.0版本,已经不使用bootstrap.yml作为启动配置文件了,所以如果还想使用bootstrap.yml,需要引入依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
之后可以配置bootstrap.yml,我的配置如下
#新版之后没有bootstrap.yml
spring:
profiles:
active: ${active} #区分环境
application:
name: dcxh-search
cloud:
nacos:
config: #配置中心
server-addr: 127.0.0.1:8848
file-extension: yml
username: nacos
password: nacos
#NacosConfigPropertiesextensionConfigs
# ext-config:
namespace: a022a0f5-656e-4790
# group: ${active}
extension-configs:
- data-id: dcxh-search-dev.yml
group: dev
refresh: true
shared-configs:
- data-id: elasticsearch-extension.yml
group: extension
refresh: true
正常启动之后,会发现加载的配置信息如下
五、动态刷新
主要使用@RefreshScope(推荐)来实现动态刷新功能,具体配置如下:
配置文件中编写一个测试配置文件
bootstrap.yml中添加一下内容:
extension-configs:
- data-id: testconfig.yml
group: dev
refresh: true
配置文件中的内容如下
编写测试类如下:
测试结果:
修改配置文件中信息,之后请求:
总结
以上就是目前摸索出来的使用方法,如有错误之处请批评指正。