“spring cloud”的配置中心工具“spring cloud config”提供了分布式系统配置文件集中管理解决方案。该工具功能强大,实现也很简单。网上可以搜索到很多开发教程和用例。本文并不是分享“spring cloud config”的开发方法,而是想聊一聊它的使用。

任何一个工具不管多么强大和便利,如果用的不好,也达不到期望的效果。拿到“spring cloud config”后,我期望基于这个工具构建的配置文件管理系统能够实现:

  1. 微服务中各个实例的配置项都集中在配置中心。运维人员无需逐一链接到各个分布式节点,能够在配置中心完成微服务实例所有配置项的修改。
  2. 配置项信息源要单一。同一个配置项不会出现在两个源中。以免两个源中同一个配置项数值不一致,导致业务逻辑混乱。

通常在网上看到的“spring cloud config”实例中,“config client”的本地配置文件“bootstrap.properties”如下:

文件中微服务端口号“8001”和实例名称“booking-server”配置项其实是有可能改动的。例如增减微服务实例、端口号已占用、新增微服务类型等场景。所以将它们放到本地配置文件中无法满足第一个需求。此外为了满足第二个需求,需要将配置项按照使用范围进行分类,分别放入不同的配置文件中:

1) 所有微服务实例共享的配置项,例如common.properties

2) 同类微服务实例共享的配置项,例如booking-common.properties

3) 特定微服务实例独享的配置项,例如booking-server-a.properties、booking-server-b.properties

这就要求微服务实例能够加载多个远端的配置文件。而上面这种配置方式是使用微服务名称“booking-server”映射到配置中心的“booking-server-dev.properties”配置文件。限制了加载的配置文件数量和名称。无法满足第二个需求。

现在以booking微服务dev版本为例,修改上面的配置文件:

  1. 微服务端口号“server.port”是实例独享的配置项,将“server.port”放入“booking-server-a.properties”配置文件中。
  2. 微服务名称“spring.application.name”是booking类服务各个实例共享的配置项,将“spring.application.name”放入“booking-common.properties”配置文件中。
  3. 服务注册中心地址配置项“eureka.client.serviceUrl.deaultZone”只能保留在本地配置文件中。
  4. 配置中心微服务名称“spring.cloud.config.discovery.service-id”只能保留在本地配置文件中。
  5. 将微服务booking与其他微服务共享的配置项放入“common.properties”配置文件中。
  6. 使用“spring.cloud.config.name”配置项同时加载“common.properties”、“booking-common.properties”和“booking-server-a.properties”配置文件。

修改后的配置文件如下:

common-dev.properties配置文件:

booking-common-dev.properties配置文件:

booking-server-a-dev.properties配置文件:

"booking-server-a"本地“bootstrap.properties”配置文件:

现在“booking”微服务实例a的本地配置文件已经得到精简,只保留了必要的配置项。这些配置项是必须的,用来指示“config client”如何找到“config server”以及应该加载那些配置文件。此外配置项“spring.cloud.config.name”和“spring.cloud.config.profile”配置项可以放到启动微服务的命令行中。这样可以编译一个通用jar包,通过不同命令行参数启动为不同的微服务实例。

再次精简的本地“bootstrap.properties”配置文件:

启动“booking”微服务a的命令:

java -jar .\booking-server.jar --spring.cloud.config.name=common,booking-common,booking-server-a --spring.cloud.config.profile=dev

本文讲的东西是比较简单的。主要是分享一下使用“spring cloud config”的一种思路。

spring cloud实战与思考(一) spring config全局配置方案设计的更多相关文章

  1. Spring Cloud实战之初级入门(五)— 配置中心服务化与配置实时刷新

    目录 1.环境介绍 2.配置中心服务化 2.1 改造mirco-service-spring-config 2.2 改造mirco-service-provider.mirco-service-con ...

  2. Spring Cloud实战 | 最终篇:Spring Cloud Gateway+Spring Security OAuth2集成统一认证授权平台下实现注销使JWT失效方案

    一. 前言 在上一篇文章介绍 youlai-mall 项目中,通过整合Spring Cloud Gateway.Spring Security OAuth2.JWT等技术实现了微服务下统一认证授权平台 ...

  3. Spring Cloud实战 | 第九篇:Spring Cloud整合Spring Security OAuth2认证服务器统一认证自定义异常处理

    本文完整代码下载点击 一. 前言 相信了解过我或者看过我之前的系列文章应该多少知道点我写这些文章包括创建 有来商城youlai-mall 这个项目的目的,想给那些真的想提升自己或者迷茫的人(包括自己- ...

  4. spring cloud实战与思考(二) 微服务之间通过fiegn上传一组文件(上)

    需求场景: 微服务之间调用接口一次性上传多个文件. 上传文件的同时附带其他参数. 多个文件能有效的区分开,以便进行不同处理. Spring cloud的微服务之间接口调用使用Feign.原装的Feig ...

  5. spring cloud实战与思考(三) 微服务之间通过fiegn上传一组文件(下)

    需求场景: 用户调用微服务1的接口上传一组图片和对应的描述信息.微服务1处理后,再将这组图片上传给微服务2进行处理.各个微服务能区分开不同的图片进行不同处理. 上一篇博客已经讨论了在微服务之间传递一组 ...

  6. spring cloud实战与思考(五) JWT之携带敏感信息

    需求: 需要将一些敏感信息保存在JWT中,以便提高业务处理效率. 众所周知JWT协议RFC7519使用Base64Url对Header和Payload的Json字符串进行编解码.A JWT is re ...

  7. spring cloud实战与思考(四) JWT之Token主动失效

    需求: JWT泄露.密码重置等场景下,需要将未过期但是已经不安全的JWT主动失效. 本文不再复述JWT的基础知识,不了解的小伙伴可以自行Google一下.这里主要是针对以上需求聊一聊解决方案.如果服务 ...

  8. [Spring Cloud实战 | 第六篇:Spring Cloud Gateway+Spring Security OAuth2+JWT实现微服务统一认证授权

    一. 前言 本篇实战案例基于 youlai-mall 项目.项目使用的是当前主流和最新版本的技术和解决方案,自己不会太多华丽的言辞去描述,只希望能勾起大家对编程的一点喜欢.所以有兴趣的朋友可以进入 g ...

  9. Spring Cloud实战 | 最八篇:Spring Cloud +Spring Security OAuth2+ Axios前后端分离模式下无感刷新实现JWT续期

    一. 前言 记得上一篇Spring Cloud的文章关于如何使JWT失效进行了理论结合代码实践的说明,想当然的以为那篇会是基于Spring Cloud统一认证架构系列的最终篇.但关于JWT另外还有一个 ...

随机推荐

  1. centos7安装python3和pip3

    python3安装 1.安装准备 # 创建安装目录 mkdir /usr/local/python3 #下载python3 wget --no-check-certificate https://ww ...

  2. HIS系统结算后,没有更新单据状态为“已结算”

    1.由于查询单据有个参数:时间,而应用服务器和数据库服务器存在时间差,经比对,数据库服务器时间要快7秒 2.应用服务器查询单据,根据当前时间去查,但是由于数据库服务器要快7秒,导致查询不出数据. 总结 ...

  3. [01] 浅谈RESTful风格的API

    1.什么是RESTful风格的API REST,即Representational State Transfer,可以理解为"(资源的)表现层状态转化". 在网络上,我们通过浏览器 ...

  4. u-boot全面分析

    uboot主Makefile分析1 uboot住Makefile分析参考:https://www.2cto.com/kf/201607/522424.html uboot version确定(Make ...

  5. C#中用HttpWebRequest中发送GET/HTTP/HTTPS请求 (转载)

    这个需求来自于我最近练手的一个项目,在项目中我需要将一些自己发表的和收藏整理的网文集中到一个地方存放,如果全部采用手工操作工作量大而且繁琐,因此周公决定利用C#来实现.在很多地方都需要验证用户身份才可 ...

  6. LOJ2538 PKUWC2018 Slay the Spire DP

    传送门 不想放题面了,咕咕咕咕咕 这个期望明明是用来吓人的,其实要算的就是所有方案的最多伤害的和. 首先可以知道的是,能出强化牌就出强化牌(当然最后要留一张攻击牌出出去),且数字尽量大 所以说在强化牌 ...

  7. 数据库日志——mysql与Oracle的日志

    一.MySQL 在数据同步中用的比较多的是MySQL的binlog 1.bin-log简介 它记录了所有的DDL和DML(除了数据查询语句,select与show不记录)语句,以事件形式记录,还包含语 ...

  8. C# 获取电脑MAC地址,IP地址,物理内存,CPU序列号,硬盘ID..........................

    上班很忙,自己做个记录 代码如下: 需要引入:System.Management 代码如下: using System; using System.Collections.Generic; using ...

  9. Luogu P1514 引水入城

    我承认我有点懒(洛谷已经发过题解了,但我发誓要坚持写博客) 这道题坑了我3天…… 首先一看就与染色问题类似,果断BFS(写DFS炸了) 先将最上面(靠近水)的一行全部扔进队列里,做一遍BFS 再对最下 ...

  10. [Oracle]如何获得出现故障时,客户端的详细连接信息

    [Oracle]如何获得出现故障时,客户端的详细连接信息 客户坚持说 只是在 每天早上5点才运行下面的语句: select / * + FULL (TAB001_TT01) * / 'TAB001_T ...