Spring Cloud学习笔记-010
分布式配置中心: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的更多相关文章
- Spring Cloud学习笔记--Spring Boot初次搭建
1. Spring Boot简介 初次接触Spring的时候,我感觉这是一个很难接触的框架,因为其庞杂的配置文件,我最不喜欢的就是xml文件,这种文件的可读性很不好.所以很久以来我的Spring学习都 ...
- Spring Cloud 学习笔记 (一)-- Eureka 服务器
开局一张图,截取了本人学习资料中的一张图,很好地展示了Eureka的架构. Eureka服务器 管理服务的作用.细分为服务注册,服务发现. 所有的客户端在Eureka服务器上注册服务,再从Eureka ...
- Spring Cloud 学习笔记(二)——Netflix
4 Spring Cloud Netflix Spring Cloud 通过自动配置和绑定到Spring环境和其他Spring编程模型惯例,为Spring Boot应用程序提供Netflix OSS集 ...
- Spring Cloud 学习笔记(一)——入门、特征、配置
[TOC] 0 放在前面 0.1 参考文档 http://cloud.spring.io/spring-cloud-static/Brixton.SR7/ https://springcloud.cc ...
- Spring Cloud学习笔记-006
服务容错保护:Spring Cloud Hystrix 在微服务架构中,我们将系统拆分成了很多服务单元,各单元的应用间通过服务注册与订阅的方式互相依赖.由于每个单元都在不同的进程中运行,依赖通过远程调 ...
- Spring Cloud学习笔记-005
服务消费者 之前已经搭建好了微服务中的核心组件——服务注册中心(包括单节点模式和高可用模式).也有了服务提供者,接下来搭建一个服务消费者,它主要完成两个目标,发现服务以及消费服务.其中,服务发现的任务 ...
- Spring Cloud学习笔记-002
搭建Spring Cloud注册中心:Eureka 服务注册:在服务治理框架中,通常都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机与端口号.版本号.通信协议等一些附加信息告诉注 ...
- Spring Cloud学习笔记-007
声明式服务调用:Spring Cloud Feign Feign基于Netflix Feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供这两 ...
- Spring Cloud学习笔记-008
继承特性 通过上节的示例实践,当使用Spring MVC的注解来绑定服务接口时,几乎完全可以从服务提供方的Controller中依靠复制操作,构建出相应的服务客户端绑定接口.既然存在这么多复制操作,自 ...
随机推荐
- CentOS7终端的分辨率和字体修改
本文转贴自https://blog.csdn.net/u010566813/article/details/40502819 一.修改分辨率 修改/boot/grub2/grub.cfg 添加如上,具 ...
- Google FireBase - fcm 推送 (Cloud Messaging)
要将 Firebase 添加到您的应用,您需要有一个 Firebase 项目以及适用于您的应用的 Firebase 配置文件. 如果您还没有 Firebase 项目,请在 Firebase 控制台中创 ...
- Shell中sed使用
sed是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往 ...
- SQL server SELECT 语句的基本结构
SELECT select_list [INTO new_table] [FROM table_source] [WHERE search_condition] [GROUP BY GROUP_BY_ ...
- C# static 变量 和方法
静态成员属于类所有,无认创建多少实例对象,静态成员在内存中只有一份:实例成员属于类的实例所有,每创建一个实例对象,实例成员都会在内存中分配一块内存区域. 就像图书馆的书,书的数量就是图书馆这个对象的静 ...
- 原生js实现删除class和添加class
内容来自百度搜索 //判断样式是否存在 function hasClass(ele, cls) { return ele.className.match(new RegExp("(\ ...
- Fragment中TabLayout加FragmentViewPager
让tablayout中的Tab平铺:在tablayout布局中写: app:tabMaxWidth="0dp"app:tabGravity="fill"app: ...
- MapReduce计算模型的优化
MapReduce 计算模型的优化涉及了方方面面的内容,但是主要集中在两个方面:一是计算性能方面的优化:二是I/O操作方面的优化.这其中,又包含六个方面的内容. 1.任务调度 任务调度是Hadoop中 ...
- Array.find()和Array.findIndex()
ES6新增的两个方法,根据回调函数返回作为判断依据,按照数组顺序进行遍历,符合条件(为真)时find()返回该值.findIndex()返回下标. 1.语法 arr.find(callback[, t ...
- [Swift]LeetCode279. 完全平方数 | Perfect Squares
Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 1 ...