Nacos(七):Nacos共享配置
前言
本文参考文章:
SpringCloud Alibaba - Nacos Config 自定义共享配置
前景回顾:
前几章已经基本介绍了springcloud项目结合Nacos的大部分用法,本文介绍一下Nacos作为配置中心时,如何读取共享配置
我的环境
- Windows10
- JDK8
- SpringCloud:Finchley.RELEASE
- SpringBoot:2.0.4.RELEASE
- spring-cloud-alibaba-dependencies:0.2.2.RELEASE
- Nacos-server:1.0.1
本文的项目Demo继续沿用之前文章中的聚合工程Nacos
,若小伙伴还没有之前的环境,可至源码地址中下载
场景描述
一个项目中服务数量增加后,配置文件相应增加,多个配置文件中会存在相同的配置,那么我们可以将相同的配置独立出来,作为该项目中各个服务的共享配置文件,每个服务都可以通过Nacos进行共享配置的读取
下面用一个demo演示下,是否可行
- demo工程:nacos-config-share
- 配置文件:nacos-config-share.yml
- 共享配置文件:shareconfig1.yml,shareconfig2.yml
创建项目
一如往常,还是在聚合工程Nacos下创建名为nacos-config-share
的子工程,其pom.xml文件依赖与之前的项目都一致,如果您没有之前的项目可参考源码地址
1、修改springboot启动类NacosConfigShareApplication.java
@SpringBootApplication
@EnableDiscoveryClient
@RestController
@RefreshScope
public class NacosConfigShareApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConfigShareApplication.class, args);
}
@Value("${nacos.share}")
private String share;
@Value("${share.config1}")
private String shareConfig1;
@Value("${share.config2}")
private String shareConfig2;
@RequestMapping("/getValue")
public String getValue() {
return share;
}
@RequestMapping("/getShare1")
public String getShare1() {
return shareConfig1;
}
@RequestMapping("/getShare2")
public String getShare2() {
return shareConfig2;
}
}
2、修改该项目的配置文件bootstrap.yml
spring:
application:
name: nacos-config-share
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
prefix: ${spring.application.name}
file-extension: yml
shared-dataids: shareconfig1.yml,shareconfig2.yml
refreshable-dataids: shareconfig1.yml,shareconfig2.yml
从配置文件可以看出,通过
shared-dataids
属性来指定要读取共享配置文件的DataID
,多个文件用,
分隔
使用refreshable-dataids
指定共享配置文件支持自动刷新
新建配置文件
这里我们作为演示,暂不加入Namespace,直接在公共空间中创建及测试
创建配置文件nacos-config-share.yml
,详细如下:
- DataId:
nacos-config-share.yml
- 配置格式:
YAML
- 配置内容:
server:
port: 9984
nacos:
share: nacos-config-share
创建共享配置文件1shareconfig1.yml
,详细如下:
- DataId:
shareconfig1.yml
- 配置格式:
YAML
- 配置内容:
share:
config1: 这里是共享配置文件1
创建共享配置文件1shareconfig2.yml
,详细如下:
- DataId:
shareconfig2.yml
- 配置格式:
YAML
- 配置内容:
share:
config2: 这里是共享配置文件2
创建成功后,配置列表如下图:
启动测试
直接启动项目,如果启动成功。可以看到日志中如下信息:
访问启动类中提供的接口,测试下能否获取到共享配置文件中的值
访问127.0.0.1:9984/getValue,返回:nacos-config-share
访问127.0.0.1:9984/getShare1,返回:这里是共享配置文件1
访问127.0.0.1:9984/getShare2,返回:这里是共享配置文件2
再测试下refreshable-dataids
配置的自动刷新是否生效
在Nacos控制台中修改共享配置文件shareconfig2.yml
的值为:这里是共享配置文件2这里是共享配置文件2
编辑保存后,重新请求 127.0.0.1:9984/getShare2 ,观察返回结果如下:
这里是共享配置文件2这里是共享配置文件2
以上返回结果说明通过在配置文件中指定shared-dataids
和refreshable-dataids
是可以实现共享配置文件的读取和自动刷新的。
需求变更
假设现在要读取
shareconfig3.yml
和shareconfig4.yml
文件但是它的Group为SHARE3_GROUP
和SHARE4_GROUP
, 即共享配置文件与项目自身配置文件不在同一Group中(上边的例子是全都在DEFAULT_GROUP分组
) 那如果继续用上边的方法,就无法读取共享配置文件
这时可以使用另一个配置ext-config
,它可以由用户自定义指定需要加载的配置DataID、Group以及是否自动刷新
并且ext-config
是一个集合(List
),支持多个配置文件的指定。
新建共享配置文件
先创建配置配置文件shareconfig3.yml
和shareconfig4.yml
,注意他们的Group属性
- DataId:
shareconfig3.yml
- Group:
SHARE3_GROUP
- 配置格式:
YAML
- 配置内容:
share:
config3: 这里是共享配置文件3,Group:SHARE3_GROUP
- DataId:
shareconfig4.yml
- Group:
SHARE4_GROUP
- 配置格式:
YAML
- 配置内容:
share:
config4: 这里是共享配置文件4,Group:SHARE4_GROUP
创建成功页面如下:
修改项目代码
1、在启动类NacosConfigShareApplication.java
中新增如下代码
@Value("${share.config3}")
private String shareConfig3;
@Value("${share.config4}")
private String shareConfig4;
@RequestMapping("/getShare3")
public String getShare3() {
return shareConfig3;
}
@RequestMapping("/getShare4")
public String getShare4() {
return shareConfig4;
}
2、修改项目配置文件bootstrap.yml
,增加ext-config
配置
spring:
application:
name: nacos-config-share
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
prefix: ${spring.application.name}
file-extension: yml
shared-dataids: shareconfig1.yml,shareconfig2.yml
refreshable-dataids: shareconfig1.yml,shareconfig2.yml
ext-config:
- data-id: shareconfig3.yml
group: SHARE3_GROUP
refresh: true
- data-id: shareconfig4.yml
group: SHARE4_GROUP
refresh: true
启动进行测试
项目经过修改后,可以看到
- 项目自身的nacos配置文件属于DEFAULT_GROUP下,默认读取
- shareconfig1.yml,shareconfig2.yml 都属于DEFAULT_GROUP下,通过
shared-dataids
指定进行读取 - shareconfig3.yml,shareconfig4.yml 都属于
非DEFAULT_GROUP
下,通过ext-config
配置属性进行自定义读取
启动项目,测试所有的配置文件是否可以正常读取
访问127.0.0.1:9984/getValue,返回:nacos-config-share
访问127.0.0.1:9984/getShare1,返回:这里是共享配置文件1
访问127.0.0.1:9984/getShare2,返回:这里是共享配置文件2这里是共享配置文件2
访问127.0.0.1:9984/getShare3,返回:这里是共享配置文件3,Group:SHARE3_GROUP
访问127.0.0.1:9984/getShare4,返回:这里是共享配置文件4,Group:SHARE4_GROUP
修改shareconfig4.yml
的配置内容为:这里是共享配置文件4,Group:SHARE4_GROUP,支持自动刷新
,保存后,再次调用127.0.0.1:9984/getShare4,返回如下:
这里是共享配置文件4,Group:SHARE4_GROUP,支持自动刷新
调用接口后发现,两种共享配置的加载方式都可以正常读取,并且可以一起使用。ext-config
的方式实现了用户自定义配置共享配置文件。
总结
上面的demo已经演示Nacos共享配置的两种实现方式,两种方式针对不同的场景,总结如下:
shared-dataids
方式:- 适合于共享配置文件与项目默认配置文件处于相同Group时,直接两条命令就可以搞定
- 优点:配置方便
- 缺点:只能在同一Group中
ext-config
方式:- 它可以由开发者自定义要读取的共享配置文件的DataId、Group、refresh属性,这样刚好解决了
shared-dataids
存在的局限性。 - 优点:可以与
shared-dataids
方案结合使用,用户自定义配置。灵活性强 - 缺点:配置容易出错,要熟悉YAML语法
- 它可以由开发者自定义要读取的共享配置文件的DataId、Group、refresh属性,这样刚好解决了
可见两种方式各有长处,所以如果在开发中需要使用共享配置,大家可以是具体情况而定选择自己最合适的方案。
本文源码:https://github.com/larscheng/larscheng-learning-demo/tree/master/Nacos
- 文章作者: LarsCheng
- 文章链接: 本文首发于个人博客:https://www.larscheng.com/nacos-namespace/
- 发布方式:OpenWrite 最懂你的科技自媒体管理平台
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LarsCheng's Blog!
Nacos(七):Nacos共享配置的更多相关文章
- Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置
前情回顾: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方式> ...
- Spring Cloud入门-Nacos实现注册和配置中心(Hoxton版本)
文章目录 摘要 Nacos简介 使用Nacos作为注册中心 安装并运行Nacos 创建应用注册到Nacos 负载均衡功能 使用Nacos作为配置中心 创建nacos-config-client模块 在 ...
- Nacos下动态路由配置
前言 Nacos最近项目一直在使用,其简单灵活,支持更细粒度的命令空间,分组等为麻烦复杂的环境切换提供了方便:同时也很好支持动态路由的配置,只需要简单的几步即可.在国产的注册中心.配置中心中比较突出, ...
- Nacos注册中心和配置中心流程原理
一.Nacos注册中心 1.服务启动后---->服务注册原理 springCloud集成Nacos实现原理: 服务启动时,在spring-cloud-commons包下 spring.facto ...
- 基于nginx tomcat redis分布式web应用的session共享配置
一.前言 nginx 作为目前最流行的开源反向代理HTTP Server,用于实现资源缓存.web server负载均衡等功能,由于其轻量级.高性能.高可靠等特点在互联网项目中有着非常普遍的应用,相关 ...
- 【Nacos】Nacos安装
1.Nacos简介 Nacos是阿里巴巴集团开源的一个易于使用的平台,专为动态服务发现,配置和服务管理而设计.它可以帮助您轻松构建云本机应用程序和微服务平台. Nacos基本上支持现在所有类型的服务, ...
- CAS 集群部署session共享配置
背景 前段时间,项目计划搞独立的登录鉴权中心,由于单独开发一套稳定的登录.鉴权代码,工作量大,最终的方案是对开源鉴权中心CAS(Central Authentication Service)作适配修改 ...
- 创建eclipse新的workspace并设置workspace共享配置
一:创建新的workspace 1.File——Switch Workspace——Other 2.修改workspace路径和名称 3.修改后如下: 4.点击OK按钮后,eclipse自动重启 同时 ...
- 7.oracle学习门户系列七---网络管理和配置
oracle学习门户系列七 网络管理和配置 们学习了模式和用户.包含模式定义以及模式的作用. 这篇我么来看下ORACLE数据库中的网络管理和配置.只是这篇好像和上篇没有继承啊.这怎么看? Ok,事实上 ...
随机推荐
- 判断list集合不为空
在java开发中新手容易将判断一个list集合是否为空,只以If(list!=null)去判断,且容易和isEmpty()混淆,但是,list集合为空还是为null,是有区别的. 先看一下下面的例子, ...
- C#8.0 中使用默认接口成员更新接口
连载目录 [已更新最新开发文章,点击查看详细] 从 .NET Core 3.0 上的 C# 8.0 开始,可以在声明接口成员时定义实现. 最常见的方案是安全地将成员添加到已经由无数客户端发布并使 ...
- C#3.0新增功能02 匿名类型
连载目录 [已更新最新开发文章,点击查看详细] 匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型. 类型名由编译器生成,并且不能在源代码级使用. 每 ...
- 浅入深出Vue:代码整洁之去重
在开始本篇的主题之前,让我们把上次遗留下来的问题都清理一下: 将其他组件中 axios 请求的地方封装起来. 这里就不把代码放在开头了,相关代码都放在文末,有兴趣了解的童鞋可以先往下翻. 好了, 我们 ...
- PHP 跨域处理
PHP 跨域处理 跨域访问失败是会出现 No 'Access-Control-Allow-Origin' header is present on the requested resource. Or ...
- mysql整数类型int后面的长度有什么意义
int 的 SQL-92 同义字为 integer.SQL-92 是数据库的一个标准. int类型的存储大小为4个字节 unsigned(无符号) int 存储范围是 2^4*8 int(M) 中的M ...
- 加深对C#数据类型的认识
值类型: 值类型源于System.Value家族,每个值类型的对象都有一个独立的内存区域用于保存自己的值,值类型 所在的内存区域称之为栈(Stack),只要在代码中修改它,就会在内存区域保存这个值. ...
- Java实现常见的排序算法
一.排序算法 常见的排序算法主要分为下面几类: 选择排序 堆排序 冒泡排序 快速排序 插入排序 希尔排序 归并排序 桶式排序 基数排序 本文主要介绍选择排序.堆排序.冒泡排序.快速排序和归并排序的原理 ...
- PyQt4 在Windows下安装
快来加入群[python爬虫交流群](群号570070796),发现精彩内容. 首先在网上下载sip文件下载完之后解压, 在Windows的开始菜单栏中进入sip的解压目录下: 在目录下面 ...
- 利用dockerfile 安装一个nginx-1.14.1
FROM docker.io/centos MAINTAINER jim 107420988@qq.com ENV TZ "Asia/Shanghai" #ENV TERM xte ...