分布式配置中心:Spring Cloud Config

  Spring Cloud Config是Spring Cloud团队创建的一个全新的项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端和客户端两个部分。其中服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置仓库并为客户端提供获取配置信息、加密/解密信息等访问接口;而客户端则是微服务架构中的各个微服务应用或基础设施,他们通过指定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。Spring Cloud Config实现了对服务端和客户端中环境变量和属性配置的抽象映射,所以它除了适用于Spring构建的应用程序之外,也可以在任何其他语言运行的应用程序中使用。由于Spring Cloud Config实现的配置中心默认采用Git来储存配置信息,所以使用Spring Cloud Config构建的配置服务器,天然就支持对微服务应用配置信息的版本管理,并且可以通过Git客户端工具来方便地管理和访问配置内容。当然它也提供了对其他存储方式的支持,比如SVN仓库、本地化文件系统等。

服务端搭建

1. 创建maven工程,骨架选择quickstart,名称为:demo-config-server

2.  加入相关依赖:

3. 创建启动类:

4. 在src\main\resources目录下创建application.yml文件:

  • spring.cloud.config.server.git.uri:配置Git仓库位置。
  • spring.cloud.config.server.git.search-paths:配置仓库路径下的相对搜索位置,可以配置多个。
  • spring.cloud.config.server.git.username:访问Git仓库的用户名。
  • spring.cloud.config.server.git.password:访问Git仓库的用户密码。

  注:由于git项目是公开的,所以不用提供用户名和密码也可以。

5. 登录Git,在demo-springcloud/目录下创建config-repo文件夹,并新建4个配置文件:

6. 配置文件的内容分别如下,为了测试版本控制,在该Git仓库的master分支中,为form属性加入1.0的后缀,同时创建一个config-label-test分支,并将个配置文件中的值用2.0作为后缀:

7. 启动项目,可以通过如下几种方式访问配置内容,其中application为配置文件的前缀,这里就是application;profile为配置文件的后缀,这里是dev、pro和test;label代表Git分支名称:

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

  例如访问http://localhost:8001/application/dev/config-label-test得到如下内容:

8. 同时,观察demo-config-server项目的控制台,发现输出了如下内容:

9. 配置服务器在从Git中获取配置信息后,会存储一份在demo-config-server的文件系统中,实质上demo-config-server是通过git clone命令将配置内容复制了一份在本地存储,然后读取这些内容并返回给微服务应用进行加载。通过Git在本地仓库暂存,可以有效的防止当Git仓库出现故障而引起无法加载配置信息的情况。可以断开网络,再次在浏览器发起上述请求,可以看到控制台的报错信息:Could not fetch remote for config-label-test remote,但是它依然会为该请求返回配置内容,这些内容源于之前访问时存于demo-config-server本地文件系统中的配置内容:

10. 根据控制台打印的路径,去到指定目录,发现下载下来的配置文件:

客户端搭建

1. 创建maven工程,骨架选择quickstart,名称为:demo-config-client

2. 加入相关依赖:

3. 创建启动类:

4. 在src/main/resources目录下创建bootstrap.properties文件(注:这些属性必须配置在bootstrap.properties中,这样demo-config-server中的配置信息才能被正确加载。Spring Boot对配置文件的加载顺序为,对于本应用jar包之外的配置文件加载会优先于应用jar包内的配置内容,而通过bootstrap.properties对demo-config-client的配置,使得该应用会从demo-config-server中获取一些外部配置信息,这些信息的优先级比本地的内容要高,从而实现了外部化配置):

  • spring.application.name:对应配置文件规则中的{application}部分。
  • spring.cloud.config.profile:对应配置文件规则中的{profile}部分。
  • spring.cloud.config.label:对应配置文件规则中的{label}部分。
  • spring.cloud.config.uri:配置中心demo-config-server的地址。

5. 创建一个RESTful接口来返回配置中心的from属性,启动项目并测试效果:

Spring Cloud学习笔记-010的更多相关文章

  1. Spring Cloud学习笔记--Spring Boot初次搭建

    1. Spring Boot简介 初次接触Spring的时候,我感觉这是一个很难接触的框架,因为其庞杂的配置文件,我最不喜欢的就是xml文件,这种文件的可读性很不好.所以很久以来我的Spring学习都 ...

  2. Spring Cloud 学习笔记 (一)-- Eureka 服务器

    开局一张图,截取了本人学习资料中的一张图,很好地展示了Eureka的架构. Eureka服务器 管理服务的作用.细分为服务注册,服务发现. 所有的客户端在Eureka服务器上注册服务,再从Eureka ...

  3. Spring Cloud 学习笔记(二)——Netflix

    4 Spring Cloud Netflix Spring Cloud 通过自动配置和绑定到Spring环境和其他Spring编程模型惯例,为Spring Boot应用程序提供Netflix OSS集 ...

  4. Spring Cloud 学习笔记(一)——入门、特征、配置

    [TOC] 0 放在前面 0.1 参考文档 http://cloud.spring.io/spring-cloud-static/Brixton.SR7/ https://springcloud.cc ...

  5. Spring Cloud学习笔记-006

    服务容错保护:Spring Cloud Hystrix 在微服务架构中,我们将系统拆分成了很多服务单元,各单元的应用间通过服务注册与订阅的方式互相依赖.由于每个单元都在不同的进程中运行,依赖通过远程调 ...

  6. Spring Cloud学习笔记-005

    服务消费者 之前已经搭建好了微服务中的核心组件——服务注册中心(包括单节点模式和高可用模式).也有了服务提供者,接下来搭建一个服务消费者,它主要完成两个目标,发现服务以及消费服务.其中,服务发现的任务 ...

  7. Spring Cloud学习笔记-002

    搭建Spring Cloud注册中心:Eureka 服务注册:在服务治理框架中,通常都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机与端口号.版本号.通信协议等一些附加信息告诉注 ...

  8. Spring Cloud学习笔记-007

    声明式服务调用:Spring Cloud Feign Feign基于Netflix Feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供这两 ...

  9. Spring Cloud学习笔记-008

    继承特性 通过上节的示例实践,当使用Spring MVC的注解来绑定服务接口时,几乎完全可以从服务提供方的Controller中依靠复制操作,构建出相应的服务客户端绑定接口.既然存在这么多复制操作,自 ...

随机推荐

  1. 执行JS

    JS执行切换frame框架后点击 Window.frame['frame路径'].frame['下级frame路径'].document.getElementById("id"). ...

  2. oracle行转列、列转行、连续日期数字实现方式及mybatis下实现方式

    转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9977591.html 九月份复习,十月份考试,十月底一直没法收心,赶在十一初 由于不可抗拒的原因又不得不重新找 ...

  3. LocalDate、LocalDateTime、LocalTime开发小结

    在我之前的文章<[整理]Java 8新特性总结 >中有提到Date/Time API (JSR 310)对日期与时间的处理.它将服务端对时间的处理进行了统一,使得对时间的处理更加规范和统一 ...

  4. 如何删除github上的某个文件夹

    在github上只能删除仓库,却无法删除文件夹或文件, 所以只能通过命令来解决 首先进入你的master文件夹下, Git Bash Here ,打开命令窗口 $ git –help 帮助命令 $ g ...

  5. centos7系统下搭建docker本地镜像仓库

    ## 准备工作 用到的工具, Xshell5, Xftp5, docker.io/registry:latest镜像 关于docker的安装和设置加速, 请参考这篇博文centos7系统下 docke ...

  6. HTML入门11

    在网页中添加矢量图形, 使用矢量图形在很多情况下,效果较好,拥有较小的文件尺寸,高度缩放,下面具体讲解如何在网页中添加矢量图形 位图和矢量图 位图文件包含了每个像素的位置和色彩信息,流行的位图格式包括 ...

  7. 1.SSM整合_单表的增删改查

    目标:增删改查 环境:Maven+Eclipse+Tomcat7+JDK7 思维导图: 表结构 目录结构 依赖 <dependencies> <dependency> < ...

  8. echarts、higncharts折线图或柱状图显示数据为0的点

    echarts.higncharts折线图或柱状图只需要后端传到前端一段json数据,接送数据的x轴与y周有对应数据,折线图或柱状图就会渲染出这数据. 比如,x轴表示美每天日期,y轴表示数量.他们的数 ...

  9. 【CSS 第五天】背景,边框

    总结一下今天所学习的内容,如下: 背景 属性 例子或作用 background background: #00FF00 url(bgimage.gif) no-repeat fixed top; ba ...

  10. mac 下SonarQube 安装与使用

    参考文件:https://www.jianshu.com/p/aa863cf30406 https://www.jianshu.com/p/b41262fca5b8 jenkins 集成Sonar: ...