一、 介绍

1,为什么需要配置中心?

当服务部署的越来越多,规模越来越大,对应的机器数量也越来越庞大,靠人工来管理和维护服务的配置信息,变得困难,容易出错。

因此,需要一个能够动态注册和获取服务信息的地方,来统一管理服务名称和其对应的服务器列表信息,称之为服务配置中心。服务提供者在启动时,将其提供的服务名称、服务器地址注册到服务配置中心。服务消费者通过服务配置中心来获得需要调用的服务,通过相应的负载均衡算法,选择其中一台服务器开始调用。

2,什么是 Spring Cloud Config

spring cloud config 是 spring cloud 中的一个组件,分布式配置中心组件,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。

二、 Spring Cloud Config 实战

2.1,构建Config Server

2.1.1,创建一个名为config-server 的 spring-boot项目,pom.xml依赖如下: 注意组件版本我用的是 Spring Boot 2.0.x

 <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties> <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>

2.2,在入口类ConfigServerApplication 添加注解 @EnableConfigServer,开启Config配置中心服务端

2.3,在根目录新建的配置文件 config-dev.yml,并提交到git仓库,实例是mysql的数据原本配置信息,提交的github中,配置文件如下:

spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.10.100:3306/spring?useSSL=false
username: test
password: 123456

2.4,配置 application.yml ,配置如下:

spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://github.com/jarvisqi/spring-cloud-microservice
search-paths: config-server
username:
password:
default-label: master
server:
port: 9400
  • spring.cloud.config.server.git.url :指定git的仓库地址,改成你自己的
  • spring.cloud.config.server.git.search-paths :指定你的配置文件所在的目录
  • username,password 如果是github公开的就不用添加,自己的私有仓库自己添加

2.4,启动Config-Server,并访问:http://localhost:9400/config/dev 地址,看到如下信息,说明服务端正常运行:

{
"name": "config",
"profiles": [
"dev"
],
"label": null,
"version": "e64289cb775e2ac7db7494c07d7e8c4933163daf",
"state": null,
"propertySources": [
{
"name": "https://github.com/jarvisqi/spring-cloud-microservice/config-server/config-dev.yml",
"source": {
"spring.datasource.driver-class-name": "com.mysql.jdbc.Driver",
"spring.datasource.url": "jdbc:mysql://192.168.10.100:3306/spring?useSSL=false",
"spring.datasource.username": "test",
"spring.datasource.password": 123456
}
}
]
}

source 下面的key就是配置的信息,http请求地址和资源文件映射如下:

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

2.2,构建Config Client

2.2.1,创建一个名为config-client 的 spring-boot项目,pom.xml依赖如下: 注意组件版本我用的是 Spring Boot 2.0.x

  <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

2.2.2,配置 application.yml ,配置如下:

spring:
application:
name: config-client
cloud:
config:
uri: http://localhost:9400
name: config
profile: dev
label: master
server:
port: 9410
  • spring.cloud.config.uri : 指定config-server 服务端地址,注意并不是git仓库地址
  • spring.cloud.config.name:注意 如果name值不写,会默认取 spring.application.name的值,资源文件名就变成了 config-client-dev,根据http请求地址和资源文件映射,肯定找不到,会报错,无法启动
  • spring.cloud.config.profile:一般就是 dev ,test ,prd,你自定义也行,因为我提交的文件写的是 dev
  • spring.cloud.config.label :git的分支

2.2.3,配置 boostrap.yml ,配置如下:

spring:
cloud:
config:
uri: http://localhost:9400

注意,此处有坑,如果你不添加 boostrap.yml文件并重新指定指定 spring.cloud.config.uri,启动客户端会报错,会默认指定 端口:8888,不是自定义的端口,无法启动会报错,当然你可以直接用 boostrap.yml ,我看那此处很多人遇到问题,遇到问题就说降低版本到1.5.X就正确,这也能算解决方案?

2.2.4,添加 ConfigController 接口,并获取配置信息,代码如下:

@RestController
public class ConfigController { @Value("${spring.datasource.driver-class-name}")
private String driverClassName; @Value("${spring.datasource.url}")
private String url; @Value("${spring.datasource.username}")
private String username; @Value("${spring.datasource.password}")
private String password; @RequestMapping("/dataconfig")
public DataConfig getDataConfig() {
DataConfig config = new DataConfig(driverClassName, url, username, password);
return config;
}
}

2.2.5,首先启动config-server,保证运行正常,再启动 config-client,并请求地址 http://localhost:9410/dataconfig,得到如下结果,说明配置中心完成:

{
"driverClassName": "com.mysql.jdbc.Driver",
"url": "jdbc:mysql://192.168.10.100:3306/spring?useSSL=false",
"username": "test",
"password": "123456"
}

以上,就可以单独部署配置中心,配置信息值需要git提交到指定的目录,微服务各个独立的服务应用都能获取。

附上源码:https://github.com/jarvisqi/spring-cloud-microservice.git

参考:

Spring Cloud Config 分布式配置中心【Finchley 版】的更多相关文章

  1. Spring Cloud Config 分布式配置中心使用教程

    一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ...

  2. 跟我学SpringCloud | 第六篇:Spring Cloud Config Github配置中心

    SpringCloud系列教程 | 第六篇:Spring Cloud Config Github配置中心 Springboot: 2.1.6.RELEASE SpringCloud: Greenwic ...

  3. Spring Cloud Config 实现配置中心,看这一篇就够了

    Spring Cloud Config 是 Spring Cloud 家族中最早的配置中心,虽然后来又发布了 Consul 可以代替配置中心功能,但是 Config 依然适用于 Spring Clou ...

  4. Spring Cloud Config的配置中心获取不到最新配置信息的问题

    Spring Cloud Config的配置中心获取不到最新配置信息的问题 http://blog.didispace.com/spring-cloud-tips-config-tmp-clear/

  5. Spring Cloud Config(配置中心)

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 一.简介 Spring Cloud Config为分布式系统中的外部配置提供服务器和客 ...

  6. Spring Cloud 2-Config 分布式配置中心(七)

    Spring Cloud  Config  1.github配置 2.服务端配置 pom.xml application.xml Application.java 3.配置和命名 1. 配置加载顺序 ...

  7. Spring Cloud (5) 分布式配置中心

    Spring Cloud Config 在分布式系统中,由于服务数量很多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,使用Spring Cloud ...

  8. spring cloud 集成分布式配置中心 apollo(单机部署apollo)

    一.什么是apollo? Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用 ...

  9. Spring Cloud之分布式配置中心

    用服务的方式来实现 ConfigAppApplication.java package com.packtpub.ConfigApp; import org.springframework.boot. ...

随机推荐

  1. a标签的使用

    a标签可以用来跳转页面请求路径,也可以用来绑定事件. 在绑定事件的时候,我需要控制a标签,不让他进行跳转. 这时候我要做的就是限制他,不让他跳转. 只需要在href属性中加入javascript:vo ...

  2. 自动化测试基础篇--Selenium中JS处理滚动条

    摘自https://www.cnblogs.com/sanzangTst/p/7692285.html 前言 什么是JS? JS就是JavaScript: JavaScript 是世界上最流行的脚本语 ...

  3. Mysql内置优化工具show profiles

    一.概述: Mysql的explain工具目前还没有Oracle的explain plan工具那么强大,但是结合show profiles工具可以实现相似的效果.show profiles语句用于在当 ...

  4. AngularJS学习之旅—AngularJS 简介(一)

    一.AngularJS 简介 1.AngularJS 是一个 JavaScript 框架. AngularJS 是一个 JavaScript 框架.它是一个以 JavaScript 编写的库.Angu ...

  5. Linux进程调度器概述--Linux进程的管理与调度(十五)

    调度器面对的情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行的错觉, 该任务分为两个不同的部分, 其中一个涉及调度策略, 另外一个涉及上下文切换. 1 背景知识 1.1 什么是调度器 ...

  6. realloc 用方法

    realloc 用方法 void* realloc(void*, n) 根据n的大小,如果n比较小,就沿用原来的内存地址(也就是返回的地址就是原来的地址),在原来地址的内存空间的最后面,加上n大小的内 ...

  7. 将正在运行的Proxmox EV5.x版本更新到最新版本

    问题描述: 最近搭建了一个KVM开源虚拟化平台 Proxmox Virtual Environment是一种基于QEMU / KVM和LXC的开源服务器虚拟化管理解决方案.您可以使用集成的,易于使用的 ...

  8. php 计算出一年中每周的周一日期

    最近接到一个任务,归纳起来,就是:要算出每年当中,每周的周一日期.想了一会,看了下date函数,深入了解了一下date函数各个参数的含义之后,终于把这道题做出来了! 在date()函数中,有一个参数对 ...

  9. MySql 中文写入数据库乱码及Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1解决

    一.中文写入乱码问题 我输入的中文编码是 urf8 的,建的库是 urf8 的,但是插入MySQL总是乱码,一堆"???????????????????????".可以使用以下的方 ...

  10. JSX格式化代码,你值得拥有!

    ext install prettier-vscode https://segmentfault.com/q/1010000014822745