我们前面接触到的spring cloud组件都是基于Netflix的组件进行实现的,这次我们来看下spring cloud 团队自己创建的一个全新项目:Spring Cloud Config.
它用来为分布式系统中的基础设施和微服务提供集中化的外部配置支持,分为服务端和客户端两个部分。

其中服务端也称为分布式配置中心,他是独立的微服务应用,用来连接配置仓库并为客户端提供获取接口(这些接口返回配置信息、加密、解密信息等);

客户端是微服务架构中的各个微服务应用或基础设施,它们通过制定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。
由于配置中心默认采用Git来存储配置信息,因此我们会用到Git相关的内容,如果没有用过Git或者忘记怎么用了,可以参考下廖雪峰老师的Git教程。
另外,我自己用的Git远程仓库是码云。
====================华丽的分割线===================
接下来看下代码怎么实现。

一、准备远程Git仓库

  1. 在Gitee上新建一个项目https://gitee.com/sam-uncle/spring-cloud-learning
  2. 在项目下新建子目录spring-cloud-config-file,然后新建三个文件
    1.   
    2. 内容分别是from=git-dev-1.0、from=git-test-1.0、from=git-1.0
  3. 新建一个分支config-lable-test,新分支里面新建三个同名的文件,不过内容分别是from=git-dev-2.0、from=git-test-2.0、from=git-2.0

二、构建配置中心

  先给出最终代码结构:

  

  搭建过程如下:

  1. 新建maven工程config-server
  2. 修改POM文件
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.sam</groupId><artifactId>config-server</artifactId><version>0.0.1-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.1.RELEASE</version></parent><properties><javaVersion>1.8</javaVersion></properties><!-- 使用dependencyManagement进行版本管理 --><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Camden.SR6</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- 引入config server依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency></dependencies></project>

  3. 创建启动类
    /*** @EnableConfigServer* * 开启Spring Cloud Config 的服务端功能**/
    @SpringBootApplication
    @EnableConfigServer
    public class ConfigServerApp {public static void main(String[] args) {SpringApplication.run(ConfigServerApp.class, args);}
    }

  4. 配置application.properties文件,指定远程仓库信息
    server.port=7001
    spring.application.name=config-server#配置Git仓库的地址
    spring.cloud.config.server.git.uri=https://gitee.com/sam-uncle/spring-cloud-learning/
    #配置仓库路径下的相对搜索位置,可以配置多个
    spring.cloud.config.server.git.search-paths=spring-cloud-config-file
    #这里配置你的Git仓库的用户名
    spring.cloud.config.server.git.username=用户名
    #这里配置你的Git仓库的密码
    spring.cloud.config.server.git.password=密码

  5. 启动并验证

    访问配置信息的URL与配置文件的映射关系如下:

  • /{application}/{profile} [/{label}]
  • /{application}-{profile}.yml
  • /{label}/{application}-{profile}.yml
  • /{application}-{profile}.properties
  • /{label}/{appliction}-{profile}.properties

    上面的url会映射{application}-{profile}.properties对应的配置文件,其中{label}对应Git上不同的分支,默认是master。

    通过浏览器访问http://localhost:7001/sam/dev/config-label-test,结果如下:

    

三、实现客户端

    最终代码结构:

  

  搭建过程如下:

  1. 新建maven工程config-client
  2. 修改POM文件
    <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.sam</groupId><artifactId>config-client</artifactId><version>0.0.1-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.1.RELEASE</version></parent><properties><javaVersion>1.8</javaVersion></properties><!-- 使用dependencyManagement进行版本管理 --><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Camden.SR6</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- 引入config依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>

  3. 创建启动类
    @SpringBootApplication
    public class ConfigClientApp {public static void main(String[] args) {SpringApplication.run(ConfigClientApp.class, args);}}

  4. 配置bootstrap.properties文件,指定config-server位置
    server.port=7002
    #{application}
    spring.application.name=sam
    #{profile}
    spring.cloud.config.profile=dev
    #{label}
    spring.cloud.config.label=master#config server uri
    spring.cloud.config.uri=http://localhost:7001/

  5. 创建controller
    @RefreshScope
    @RestController
    public class TestController {/*** 通过@Value 来讲配置文件中的值写入到代码中*/@Value("${from}")private String from;@RequestMapping("/from")public String from() {return from;}
    }

  6. 启动并测试

    

四、工作原理
Spring Cloud Config配置中心的工作原理如下:

  1. 客户端启动时,根据bootstrap.properties中配置的应用名{application}、环境名{profile}、分支名{label},向Config Server请求获取配置信息。
  2. Config Server根据自己维护的Git仓库信息和客户传递过来的配置定位信息去查找配置信息。
  3. 通过git clone命令将找到的配置信息下载到本地(Config Server的文件系统中)。在通过页面访问或启动客户端的时候,我们在服务端能看到如下下载的log:
    2018-05-14 22:51:58.055  INFO 3084 --- [nio-7001-exec-1] o.s.c.c.s.e.NativeEnvironmentRepository  : Adding property source: file:/C:/Users/sam/AppData/Local/Temp/config-repo-8627749771720918793/spring-cloud-config-file/sam-dev.properties
    2018-05-14 22:51:58.055  INFO 3084 --- [nio-7001-exec-1] o.s.c.c.s.e.NativeEnvironmentRepository  : Adding property source: file:/C:/Users/sam/AppData/Local/Temp/config-repo-8627749771720918793/spring-cloud-config-file/sam.properties

  4. Config Server创建Spring 的ApplicationContext实例,并从Git本地仓库中加载配置文件,最后将这些配置内容读取出来返回给客户端。
  5. 客户端在获取外部配置信息后加载到客户端的applicationContext实例。

转载于:https://www.cnblogs.com/sam-uncle/p/9036053.html

spring cloud 入门系列七:基于Git存储的分布式配置中心--Spring Cloud Config相关推荐

  1. 史上最简单的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)(Finchley版本)

    转载请标明出处: http://blog.csdn.net/forezp/article/details/81041045 本文出自方志朋的博客 个人博客纯净版:https://www.fangzhi ...

  2. 企业分布式微服务云SpringCloud SpringBoot mybatis (七)高可用的分布式配置中心(Spring Cloud Config)...

    讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用,架构图如下: 一. ...

  3. 第七篇: 高可用的分布式配置中心(Spring Cloud Config)(Finchley版本)V2.0_dev

    前言: 上一篇文章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用. ...

  4. 企业级 SpringCloud 教程 (七) 高可用的分布式配置中心(Spring Cloud Config)

    一.准备工作 继续使用上一篇文章的工程,创建一个eureka-server工程,用作服务注册中心. 在其pom.xml文件引入Eureka的起步依赖spring-cloud-starter-eurek ...

  5. java B2B2C Springcloud多租户电子商城系统-(七)高可用的分布式配置中心(Spring Cloud Config)...

    讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用,架构图如下: 一. ...

  6. java springcloud版b2b2c社交电商spring cloud分布式微服务 (七)高可用的分布式配置中心(Spring Cloud Config)...

    Springcloud b2b2c电子商务社交平台源码请加企鹅求求:一零三八七七四六二六.讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取 ...

  7. SpringCloud学习(七)高可用的分布式配置中心(Spring Cloud Config)(Finchley版本)

    上一篇文章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用 准备工作 ...

  8. 史上最简单的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)

    转:https://blog.csdn.net/forezp/article/details/70037513 上一篇文章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当 ...

  9. 《深入理解 Spring Cloud 与微服务构建》第十三章 配置中心 Spring Cloud Config

    <深入理解 Spring Cloud 与微服务构建>第十三章 配置中心 Spring Cloud Config 文章目录 <深入理解 Spring Cloud 与微服务构建>第 ...

最新文章

  1. 宝塔php共生,宝塔面板如何开启php扩展
  2. 表单提交,以及标注。
  3. 电脑手写板_点到之处妙笔生花,实用平板电脑手写电容笔推荐
  4. c语言库快速幂函数,C语言 - 快速幂 - 迭代法+递归法 - 详细讲解
  5. 中国移动神州行5元卡普遍缺货
  6. OpenCV开发团队开源计算机视觉标注工具CVAT
  7. LevelDB的源码阅读(三) Get操作
  8. 使控件大小随窗口变化
  9. 图像处理_如何保存浮点型数值的图像? (C++ / OpenCV)
  10. BIM技术在工程成本管控中有哪些优势
  11. 十进制与二进制相互转换(c++)
  12. 网站服务器攻击的方法,常见的几种WEB服务攻击方式
  13. 淘宝客防止偷单淘宝联盟检测偷单验证PID是否为自己推广位
  14. OneNote同步问题,提示没有权限
  15. 几款笔记软件的使用感受
  16. layui菜鸟教程--乐字节前端
  17. Visual Studio中如何设置背景图片,壁纸
  18. 在云计算大数据学习中心学习的第一天
  19. Windows记录ping时间戳
  20. 国税局发票查验中英文验证码识别,识别率95.2%

热门文章

  1. python类对象点处折行_史上最全的Python面向对象知识点疏理(对象是类的实例)
  2. 西安4年java多少时间_西安学习java一般要多久
  3. 深入理解计算机系统 视频教程,深入理解计算机系统1
  4. oracle视图查询数据慢,8i查询DBA_FREE_SPACE视图极慢的问题
  5. mysql指令按顺序排列_mysql基本语法大全
  6. python自动化测试的工具_python自动化测试(3)- 自动化框架及工具
  7. 《LeetcodeHot100非困难题补录》
  8. leetcode 滑动窗口小结 (三)
  9. leetcode 235. 二叉搜索树的最近公共祖先 思考分析
  10. oo0ooo0ooo0oo_OoO的完整形式是什么?