Spring Cloud 配置服务

1. 配置服务简介

  • 产生背景:

    传统开发中,我们通常是将系统的业务无关配置(数据库,缓存服务器)在properties中配置,在这个文件中不会经常改变,但随着系统规模的扩大,项目成员越来越多,会有越来越多的伙伴更改配置文件,开发、测试、生产环境分离,因配置产生的问题越来越多。完全可以避免因配置文件的导致的问题产生,配置服务应运而生。
  • 什么是配置服务?

    将配置统进行集中管理,提供一配置服务,开发、测试、生产环境均可直接从配置服务器中读取配置信息。大致就是,应用在启动后从配置服务器中获取配置信息,加入到环境中。这样所有的配置服务都可以进行集中管理。
  • 顶层架构设计如图所示。

2. SpringBoot搭建配置服务:

  • pom.xml添加依赖:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
  • application.yml或者bootstrap.yml添加scm相关配置
spring:
profiles:
active: git
cloud:
config:
enabled: true
server:
git:
uri: http://ip:port/test/remoteConfig.git
username: username
password: password

3. 应用系统使用配置服务

  • pom.xml中添加配置:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
  • application.yml或者bootstrap.yml添加配置服务器:
spring:
cloud:
config:
name: db
profile: dev
label: master
uri: http://ip:port
enabled: true
profiles:
active: db

4. 服务器端实现:

服务器端实现比较简单,大致流程是:当服务器接收到配置服务请求的时候,会首先从git仓库中pull最新的配置信息到本地仓库,然后服务器从本地仓库中读取所需要的配置信息返回给客户端。

5. 客户端实现:

  • spring-cloud-config-client.jar中的Spring.factories有如下一段配置
# Bootstrap components
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
org.springframework.cloud.config.client.ConfigServiceBootstrapConfiguration,\
org.springframework.cloud.config.client.DiscoveryClientConfigServiceBootstrapConfiguration

很明显关键入口为ConfigServiceBootstrapConfiguration,关键配置为

@Bean
@ConditionalOnProperty(value = "spring.cloud.config.enabled", matchIfMissing = true)
public ConfigServicePropertySourceLocator configServicePropertySource(ConfigClientProperties properties) {
ConfigServicePropertySourceLocator locator = new ConfigServicePropertySourceLocator(
properties);
return locator;
}

向spring容器中注入了ConfigServicePropertySourceLocator,容器在初始化的时候会调用locate方法,其流程如图所示。



关键方法为RestTemplate的exchange方法。其主要功能为的调用远程服务器的接口获取相关配置。

Spring Cloud 配置服务的更多相关文章

  1. Servlet+MyBatis项目转Spring Cloud微服务,多数据源配置修改建议

    一.项目需求 在开发过程中,由于技术的不断迭代,为了提高开发效率,需要对原有项目的架构做出相应的调整. 二.存在的问题 为了不影响项目进度,架构调整初期只是把项目做了简单的maven管理,引入spri ...

  2. Spring Cloud云服务架构 - commonservice-config配置服务搭建

    1. 介绍 Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持.使用Config Server,您可以在所有环境中管理应用程序的外部属性.客户端和服务器上的概念映射与 ...

  3. Spring cloud实现服务注册及发现

    服务注册与发现对于微服务系统来说非常重要.有了服务发现与注册,你就不需要整天改服务调用的配置文件了,你只需要使用服务的标识符,就可以访问到服务. 本文属于<7天学会spring cloud系列& ...

  4. 记录一个 spring cloud 配置中心的坑,命令行端口参数无效,被覆盖,编码集问题无法读取文件等.

    spring cloud 配置中心 结合GIT , 可以运行时更新配置文件.发送指令让应用重新读取配置文件. 最近在测试服务器实现了一套,结果CPU 实用率暴增,使用docker compose启动 ...

  5. Spring Cloud微服务系列文,服务调用框架Feign

    之前博文的案例中,我们是通过RestTemplate来调用服务,而Feign框架则在此基础上做了一层封装,比如,可以通过注解等方式来绑定参数,或者以声明的方式来指定请求返回类型是JSON.    这种 ...

  6. Dubbo和Spring Cloud微服务架构'

    微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...

  7. Spring Cloud 之 服务注册与发现

    作为微服务框架,提供服务注册发现是最基本的功能.Spring Cloud 针对服务注册发现 提供了 Eureka版本的实现 .Zookeeper版本的实现.Consul版本的实现.由于历史原因 Eur ...

  8. Spring Cloud微服务笔记(二)Spring Cloud 简介

    Spring Cloud 简介 Spring Cloud的设计理念是Integrate Everything,即充分利用现有的开源组件, 在它们之上设计一套统一的规范/接口使它们能够接入Spring ...

  9. Spring Cloud中服务的发现与消费

    之前没注意,微信公众号的图片不能引用到其他地方,本文图片显示不正常,原图在写完博客后已经删了,,,,,,所以本文小伙伴可以移步这里https://mp.weixin.qq.com/s/GoIZdwt5 ...

随机推荐

  1. Java和C#语法对比

    Java 有静态导入,既可以导入静态方法和字段. .NET没有 Java里package和文件夹对应关系是强制的,要改都改.而C#中namespace和文件夹可以不对应,C# 更喜欢在一个projec ...

  2. 【Android UI】Android开发之View的几种布局方式及实践

    引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...

  3. [SystemC] Setting Up the Environment

    My operating system is Ubuntu 12.04. 0. Checking Your Compilers First thing first, you will need the ...

  4. 【转】react 状态与属性区别

    prop                  state 能否从父组件获取初始值             是                      否 能否由父组件修改               ...

  5. tableindex

    在写代码的时候,失焦的第一反应便是ng-blur,没想到在一个标签上其作用了,多加了几个标签没反应,于是发现了tableindex,写的代码列子如下,希望可以帮助你: <img src='{{a ...

  6. 自学日记--JavaScript 001

    1.1输出内容: document.write(); 1.2警告语句: alert(); 1.3确认语句: comfirm(str); 返回值:boolean  确认返回true  取消返回false ...

  7. Linux内核--网络栈实现分析(三)--驱动程序层+链路层(上)

    本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7497260 更多请看专栏,地址 ...

  8. hosts文件的一个小发现

    今天才发现原来同一个ip可以在hosts文件中配置多个域名.之间老是换一个网站就改一下,现在终于不用这么麻烦了 127.0.0.1 gg.pclady.com.cn 127.0.0.1 gg.pcon ...

  9. JavaScript知识总结<一>

    JavaScript核心基础语法: 1.什么是JavaScript? 我们知道在Web标准中网页由:结构.形式.行为三部分组成:结构由标准形式XHTML.形式又标准形式CSS,那么行为的表现就由Jav ...

  10. XCAT在虚拟机上部署系统

    xcat更新到2.13了,老的manual很多都没用了.前一整子居然没搞成功,只好再来试一次. 官网也搬到了xcat.org.首先就是下core和dep包 分别是 xCAT Core Packages ...