SpringCloud-Config 配置中心
概述
分布式系统面临的问题
微服务意味着要将单体应用中的业务拆分成一个个的子服务,这些服务都需要必要的配置信息才能运行,如果有上百个微服务,上百个配置文件,管理起来是非常困难的,这时候,一套集中式的、动态的配置管理中心是必不可少的,Spring Cloud 提供了 ConfigServer 来解决这个问题。
是什么?
Spring Cloud Config 为微服务提供了集中化的外部配置支持,配置服务器为不同微服务应用的所有环境提供了一个中心化的外部配置。
Spring Cloud Config 分为服务端和客户端两部分。
- 服务端也成为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器,并为客户端提供获取配置信息、加密解密信息灯访问接口
- 客户端则是通过指定的配置中心来管理应用资源以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息,配置服务器默认使用 git 来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过 git 客户端工具来方便的管理和访问配置内容
能干嘛?
- 集中管理配置文件
- 不同环境不同配置,动态化的配置更新,分环境部署,比如dev/prod/test/beta/release
- 运行期间动态调整配置,不再需要在每个服务上编写配置文件,服务会向配置中心统一拉取自己的配置
- 当配置发生变动时,服务无需重启,可以动态的应用新配置
- 将配置信息以 REST 接口的形式暴露给微服务
与 Github 整合配置
Spring Cloud Config 默认使用 Git 来存储配置文件(也有其他方式,比如SVN、本地文件,但最推荐的还是 Git),而且使用的是 http/https 访问的形式

基本使用
服务端准备
1、使用 GitHub 或其它代码库创建一个仓库 springcloud-config,添加几个文件,创建一个 dev 分支

2、新建一个项目当作配置中心,添加 maven 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
3、在application.yml添加如下配置,配置自己的远程仓库地址,如果 ssh 无法连接可以尝试使用 https
server:
port: 3344
spring:
application:
name: cloud-config-center
cloud:
config:
server:
git:
# 远程库地址
uri: @*&%$%#$%
# 搜索目录
search-paths:
- springcloud-config
# 读取分支
label: master
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://eureka7001.com:7001/eureka
4、在主启动类上开启配置服务
@SpringBootApplication
@EnableConfigServer
public class ConfigCenterMain3344 {
public static void main(String[] args){
SpringApplication.run(ConfigCenterMain3344.class, args);
}
}
5、在浏览器输入如下地址可以访问到配置文件的信息

官网上介绍了如下几种访问方式:
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
其中第一种方式返回的是 json 数据(如下图所示),其它方式返回的都是文件真正的内容

客户端准备
我们使用 bootstrap.yml 最为配置文件
application.yml 是用户级的资源配置项
bootstrap.yml 是系统级的,优先级更高
Spring Cloud 会创建一个 Bootstrap Context,作为 Spring 应用的 Application Context 的父上下文。初始化的时候,Bootstrap Context 负责从外部源加载配置属性,并解析配置。这两个上下文共享一个从外部获取的 Environment。
Bootstrap 属性有高优先级,默认情况下,它们不会被本地配置覆盖,Bootstrap Context 和 Application Context 有着不同的约定,所以新加一个 bootstrap.yml 文件,保证 Bootstrap Context 和 Application Context 配置的分离
1、添加 Maven 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2、添加配置文件 bootstrap.yml
server:
port: 3355
spring:
application:
name: cloud-config-client
cloud:
config:
label: master #分支名
name: config #配置文件名
profile: test #配置文件后缀
uri: http://config3344.com:3344
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://eureka7001.com:7001/eureka
3、编写 controller,获取配置中心中的文件属性
@RestController
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/info")
public String getConfigInfo(){
return configInfo;
}
}
4、浏览器输入地址访问

如果需要获取其它配置文件内容,只需要修改 bootstrap.yml 中的 label、name、profile 即可
存在的问题?
当配置中心的配置文件内容发生改动,服务端和客户端是否能够动态的获取?
经测试,服务端可以动态的获取,客户端不能!
因为服务端直接从配置中心获取,而客户端是从上下文环境中获取已加载的属性,配置中心修改后,由于服务没有重启,获取的仍然是之前的属性。
Config 动态刷新
对客户端进行修改
1、需要引入 actuator 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2、添加如下配置
# 暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
3、在 Controller 上添加注解 @RefreshScope
4、刷新服务端后,发送 Post 请求,curl -X POST http://localhost:3355/actuator/refresh,客户端刷新即可获取最新内容,避免了服务重启

仍然存在的问题?
- 每个微服务都需要发送一次 POST 请求。
- 如何广播通知?一次通知,处处生效
- 如何进行差异化的处理,让部分服务动态获取
下一篇为大家介绍:Spring Cloud Bus 消息总线
SpringCloud-Config 配置中心的更多相关文章
- spring-cloud config配置中心
这里那些概念不说,主要是记录下spring cloud config配置中心的服务端和客户端的一个demo. 服务端即提供统一配置文件 客户端即从服务端读取配置 1.新建一个spring boot项目 ...
- SpringCloud Config(配置中心)实现配置自动刷新(十六)
一.实现原理 1.ConfigServer(配置中心服务端)从远端git拉取配置文件并在本地git一份,ConfigClient(微服务)从ConfigServer端获取自己对应 配置文件: 2.当远 ...
- SpringCloud Netflix (六):Config 配置中心
------------恢复内容开始------------ SpringCloud Config 配置中心 Config 配置中心 Spring Cloud Config为分布式系统中的外部化配置提 ...
- springcloud之config配置中心-Finchley.SR2版
本篇和大家分享的是springcloud-config配置中心搭建,写到这里突然想起自己曾今开源过基于Redis发布订阅编写的一个配置中心,刚看了git星数有点少哈哈,这里顺势发个连接欢迎大侠们点赞: ...
- 七、springcloud之配置中心Config(二)之高可用集群
方案一:传统作法(不推荐) 服务端负载均衡 将所有的Config Server都指向同一个Git仓库,这样所有的配置内容就通过统一的共享文件系统来维护,而客户端在指定Config Server位置时, ...
- 跟我学SpringCloud | 第七篇:Spring Cloud Config 配置中心高可用和refresh
SpringCloud系列教程 | 第七篇:Spring Cloud Config 配置中心高可用和refresh Springboot: 2.1.6.RELEASE SpringCloud: Gre ...
- 微服务SpringCloud之Spring Cloud Config配置中心Git
微服务以单个接口为颗粒度,一个接口可能就是一个项目,如果每个项目都包含一个配置文件,一个系统可能有几十或上百个小项目组成,那配置文件也会有好多,对后续修改维护也是比较麻烦,就和前面的服务注册一样,服务 ...
- 微服务SpringCloud之Spring Cloud Config配置中心服务化
在前面两篇Spring Cloud Config配置中心的博客中都是需要指定配置服务的地址url:spring.cloud.config.uri,客户端都是直接调用配置中心的server端来获取配置文 ...
- SpringCloud学习笔记(7):使用Spring Cloud Config配置中心
简介 Spring Cloud Config为分布式系统中的外部化配置提供了服务器端和客户端支持,服务器端统一管理所有配置文件,客户端在启动时从服务端获取配置信息.服务器端有多种配置方式,如将配置文件 ...
- SpringCloud的入门学习之概念理解、Config配置中心
1.SpringCloud Config分布式配置中心.分布式系统面临的配置问题. 答:微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务.由于每个 ...
随机推荐
- 那些年,我们追过的java8
9月份java9就要发布了,在8月的最后一天决定回顾一下java8那些惊天动地的变化,加深理解,共同进步. 我们都知道java与c++,c不同是一个为面向对象而生的语言,面向对象思想贯彻了java发展 ...
- HTML 基础(五)
一.列表 有序列表 无序列表 自定义列表 无序列表 无序列表是一个项目的列表,此列项目使用粗体圆点进行标记 无序列表使用 <ul> 标签 <ul> <li>Coff ...
- SpringBoot学习笔记(十一:使用MongoDB存储文件 )
@ 目录 一.MongoDB存储文件 1.MongoDB存储小文件 2.MongoDB存储大文件 2.1.GridFS存储原理 2.2.GridFS使用 2.2.1.使用shell命令 2.2.2.使 ...
- MATLAB——文件读写(1)
1.文件打开关闭 (1)文件打开 fid=fopen(文件名,‘打开方式’)说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功.文件名用字符串形式,表示待打开的数据文件.常 ...
- docker-compose搭建redis哨兵集群
头脑风暴 出于学习目的,您可以很轻松地在docker环境下运行redis的单个实例,但是如果您需要在生产环境中运行它,那么必须将Redis部署为HA(High Avaliable)模式. Redis ...
- ES6规范及语法基础
var的特点 函数作用域 let的特点 没有变量提升,必须先声明.再调用 同一个作用域下不可以重复定义同一个名称 块级作用域 function fun(){ let a = 10 if(true){ ...
- list容器排除重复单词的程序
#include<iostream> #include<fstream> #include<string> #include<algorithm> #i ...
- 在线诊断工具arthas (windows)
介绍: arthas是阿里巴巴开发的一款开源的,Java应用程序排查问题的非常好用的工具 当你遇到以下类似问题而束手无策时 arthas 可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各 ...
- B - 来找一找吧 HihoCoder - 1701(排列组合 + 同余差值相同)
这次到渣渣问桶桶了... 准备给你n个数a1, a2, ... an,桶桶你能从中找出m个特别的整数吗,我想让任意两个之差都是k的倍数. 请你计算有多少种不同的选法.由于选法可能非常多,你只需要输出对 ...
- springboot 切面添加日志功能
1.新建一个springboot项目 2.定义个切面类,并指定切入点,获取所需记录信息(如:访问人IP, 访问地址,访问地址名称等) 3.新建数据库 SET FOREIGN_KEY_CHECKS=0; ...