说明

用于分布式中统一的配置管理,是一个单独的微服务

简单例子

准备git

1.我自己在本地环境搭建了git服务器 也可以使用github 可参考:https://www.cnblogs.com/LQBlog/p/10218798.html    可参考git命令https://www.cnblogs.com/LQBlog/p/10219959.html

2.添加一个git仓库 当前demo git地址为:http://admin@localhost:1234/r/config.git

3在master分支增加2个配置文件

内容分别为data-source:2   data-source:1

4.再添加一个properti2.0 分支

内容分别为data-source: properti2.0-i3  data-source:properti2.0.1

服务端

1.创建一个spring-cloud-config-server项目

2.引入pom依赖

    <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>

3.启动添加config服务端功能

@SpringBootApplication
@EnableConfigServer //开启config服务端功能
public class SpringCloudConfigApplication { public static void main(String[] args) {
SpringApplication.run(SpringCloudConfigApplication.class, args);
} }

4.yml配置git信息

spring:
application:
name: config
cloud:
config:
server:
git:
uri: http://admin@localhost:1234/r/config.git #git地址
search-paths: ERPApplicationConfig/ #查找git目录
username: admin #git用户名
password: admin #git密码
server:
port: 7001

5.访问配置文件的URl映射  

 /{application}/{profile}[/{label}]

{application}-{profile}.yml

/{label}/{application}-{profile}.yml

/{application}-{profile}.properties

/{label}/{application}-{profile}.properties

如访问master dev环境的文件

http://127.0.0.1:7001/mybatis/dev/master

version为git上面的版本号   通过版本号可以知道返回的哪一次提交的配置

server启动时会通过git clone 将配置信息复制一份到本地。然后每次访问http://127.0.0.1:7001/mybatis/dev/master 会通过git pull  获取最新配置。如果git 挂了 会直接返回本地的配置;如关掉git服务端再访问http://127.0.0.1:7001/mybatis/dev/master 日志打印

虽然报错 但是还是能正常返回配置信息  因为返回本地的原因

客户端

1.新建一个client项目

2.配置pom依赖

 <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
</dependencies>

3.新建一个bootstrap.yml

ps:因为读取配置的时候是加载bootstrap.yml的时候就读取了 如果配置到application.yml 加载的时候这个配置还没初始化

spring:
application:
name: mybatis #对应{application}
cloud:
config:
profile: dev #映射{profile}
label: master #映射{label}
uri: http://127.0.0.1:7001 #config server地址
server:
port: 7002

4.新建一个contorller测试读取配置

@Controller
public class ConfigInfoContorller {
@Value("${data-source}")
private String dataSource;
@RequestMapping("/getDataSorce")
@ResponseBody
public String getDataSource(){
return dataSource;
}
}

或者

@Controller
public class ConfigInfoContorller {
@Autowired
private Environment environment;
@RequestMapping("/getDataSorce")
@ResponseBody
public String getDataSource() {
//读取配置 如果不存在返回undefined
return environment.getProperty("data-source", "undefined");
} }

5.启动config servicer  configclient测试

更多配置

本地调试

当configserver服务不可用或者我们需要本地调试指定我们自己的配置文件 可以将配置git clone到本地 然后指定应用我们本地的配置

spring:
cloud:
config:
server:
git:
uri: file:/Users/liqiang/Desktop/gitblit/config/config
search-paths: ERPApplicationConfig/ #查找git目录

uri占位符

通过application自动映射仓库地址 实现一个项目对应一个git

http://admin@localhost:1234/r/config.git

http://admin@localhost:1234/r/{application}

当我们输入http://127.0.0.1:7001/config/dev/master  会自动把config 映射到对应的仓库地址

如果使用config client 会把application.name填充到占位符

ps:不仅{application} 可以占位{profile}{label}也可以

search-paths占位

实现一个git 不同的项目对应不同的配置目录

spring:
application:
cloud:
config:
server:
git:
uri: http://admin@localhost:1234/r/config #git地址 file:/Users/liqiang/Desktop/gitblit/config/config
search-paths: '{application}/' #查找git目录
username: admin #git用户名
password: admin #git密码

将搜索appliction映射名字目录下的 application-profile文件

多仓库配置

容易造成混乱不推荐

本地文件系统

将应用本地文件 src/main/resource下的配置文件 不推荐使用 可以通过spring.cloud.config.server.native.search-locations指定搜索路

spring.profiles.active= native

健康监测

http://admin@localhost:1234/r/{application}  当我们使用占位符的方式的时候server会去检查http://admin@localhost:1234/r/app的git地址 导致报错以及heath健康检查为dwon 导致分析的时候误认为git挂了

测试

1.server引入端点pom

 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2.开启端点配置

management:
endpoints:
web:
exposure:
include: health

3、访问http://127.0.0.1:7001/actuator/health

4.增加配置

spring:
application: config-server
cloud:
config:
server:
git:
uri: http://admin@localhost:1234/r/{application} #git地址 file:/Users/liqiang/Desktop/gitblit/config/config
search-paths: '{application}/' #查找git目录
username: admin #git用户名
password: admin #git密码
health:
repositories:
check:
name: config #检查的application占位符
lable: master #检查的lable占位符
profiles: default #检查的profiles 占位符
server:
port: 7001
management:
endpoints:
web:
exposure:
include: health

访问

也可以通过

spring.cloud.config. server.health.enabled=false关闭健康检查

属性覆盖

spring.cloud.config.server.overrides.{propertyname}={value} config-server通过此配置配置的属性将不可被客户端覆盖

安全保护

身份认证

1.serverconfig增加pom依赖

  <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>

2.serverconfig配置

spring:
security:
user:
name: liqiang
password: liqiang

3.访问http://127.0.0.1:7001/config/dev/master

4.config-client客户端则需要配置

spring:
cloud:
config:
username: liqiang
password: liqiang

配置加密(对称加密)

1.下载需要更换的jar http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

2.执行java -verbose查看jdk安装

3.将下载下来的jar 覆盖$JAVA HOME/jre/lib/security 原来的jar

4.server配置秘钥

encrypt:
key: ffff

ps:必须在bootstrap下配置

5.相关端点

http://127.0.0.1:7001/encrypt/status(get请求) 返回ok表示配置成功

http://127.0.0.1:7001/key(get请求) 返回秘钥

http://127.0.0.1:7001/encrypt(post请求) 将body文件加密

http://127.0.0.1:7001/decrypt(post请求) 将body文件解密

6.使用posmanpost访问/encrypt 将加密数据放到body进行加密

7.将配置信息的放入加密字符串并加上{cipher}前缀

8.当客户端访通过config-server访问配置文件 cipher前缀的标识着加密数据 将自动解密

配置中心集群

传统方式

服务端集群通过nginx代理

注册中心服务化

服务端

1.pom增加eureka依赖

  <!--使用eureka来实现配置中心的高可用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2.application增加注解开启服务注册功能

@SpringBootApplication
@EnableConfigServer //开启config服务端功能
@EnableDiscoveryClient //开启将服务注册到注册中心
public class SpringCloudConfigServerApplication { public static void main(String[] args) {
SpringApplication.run(SpringCloudConfigServerApplication.class, args);
} }

3.yml文件配置注册中心地址并开启info端点

management:
endpoints:
web:
exposure:
include: health,info
eureka:
instance:
hostname: localhost #当前实例的主机名字
client:
serviceUrl:
defaultZone: http://peer1:1111/eureka/, http://peer2:1112/eureka/

4.测试

客户端

1.增加eurekapom依赖 用于服务发现

     <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2.application开启服务发现的注解

@SpringBootApplication
@EnableDiscoveryClient //开启服务发现
public class SpringCloudConfigClientApplication { public static void main(String[] args) {
SpringApplication.run(SpringCloudConfigClientApplication.class, args);
} }

3.yml配置

spring:
application:
name: config #对应{application}
cloud:
config:
profile: dev #映射{profile}
label: master #映射{label}
#uri: http://127.0.0.1:7001 #config server地址
username: liqiang #configserver身份认证用户名
password: liqiang #configserver身份认证密码
discovery:
service-id: CONFIG-SERVER #configserver的服务名
enabled: true #开启通过服务访问configserver的功能
server:
port: 7002
eureka:
instance:
hostname: localhost #当前实例的主机名字
client:
serviceUrl:
defaultZone: http://peer1:1111/eureka/, http://peer2:1112/eureka/

将原来的url注释改为spring.cloud.discovery.service-id 指定configserver是那个服务  spring.coud.discovery.enabled=true 表示开启通过服务访问configserver

快速响应与重试

快速响应

我们比较大的项目的时候刚开始启动会初始化一系列配置可能耗时5分钟。但是前面都没问题 当加载config的时候出现异常 前面的初始化就没有意义了。

可以通过配置 如果config-server不通的时候能够马上抛出异常

只需要通过配置

spring.cloud.config.fail-fast=true

重试

当我们通过config-server加载失败的时候可以通过设定重试时间以及间隔,避免config-server出现网络占时不通而导致失败

1.spring.cloud.config.fail-fast=true 增加了快速响应配置

2.pom依赖

 <!--连接服务端重试的功能 依赖 前提 必须确保开启了fail-fast 默认6秒重试一次-->
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>

3.我们再不启动config.server的时候启动client

重试6此失败

相关配置

spring:
cloud:
config:
retry:
multiplier: 1.1 #默认间隔乘数 如果间隔是1000 下一次间隔是1100
max-interval: 2000 #默认最大间隔数(毫秒)
max-attempts: 6 #默认重试次数
initial-interval: 1000 #默认间隔数

动态刷新配置 

1.client pom增加依赖用于端点

<!--开启端点  用于端点模块提供的 动态刷新配置 /refresh-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2.client yml开启/refresh端点

management:
endpoints:
web:
exposure:
include: refresh

3.post请求访问http://127.0.0.1:7002/actuator/refresh 刷新配置

ps:需要刷新配置的地方需要打上@RefreshScope注解,如:

@Controller
@RefreshScope
public class ConfigInfoContorller {
@Autowired
private Environment environment;
@RequestMapping("/getDataSorce")
@ResponseBody
public String getDataSource() {
//读取配置 如果不存在返回undefined
return environment.getProperty("data-source", "undefined");
}
@RequestMapping("/getEncryptionDataSource")
@ResponseBody
public String getEncryptionDataSource(){
return environment.getProperty("dbdatasource", "undefined");
} }

Spring Cloud-config(十一)的更多相关文章

  1. Spring Cloud第十一篇 | 分布式配置中心高可用

    ​ 本文是Spring Cloud专栏的第十一篇文章,了解前十篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cl ...

  2. spring cloud config 入门

    简介 Spring cloud config 分为两部分 server client config-server 配置服务端,服务管理配置信息 config-client 客户端,客户端调用serve ...

  3. Spring Cloud Config

    Spring Cloud Config provides server and client-side support for externalized configuration in a dist ...

  4. Spring Cloud官方文档中文版-Spring Cloud Config(上)

    官方文档地址为:http://cloud.spring.io/spring-cloud-static/Dalston.SR2/#spring-cloud-feign 文中例子我做了一些测试在:http ...

  5. Spring Cloud官方文档中文版-Spring Cloud Config(下)-客户端等

    官方文档地址为:http://cloud.spring.io/spring-cloud-static/Dalston.SR2/#_serving_alternative_formats 文中例子我做了 ...

  6. SpringCloud的配置管理:Spring Cloud Config

    演示如何使用ConfigServer提供统一的参数配置服务 ###################################################################一.概 ...

  7. 搭建spring cloud config

    很久没更新了,因为不是专职研究spring cloud,因此更新速度得看工作强度大不大,每天能抽出的时间不多,如果更新太慢了,并且有小伙伴看的话,请见谅了. Spring Cloud简介 Spring ...

  8. Spring Cloud Config - RSA简介以及使用RSA加密配置文件

    简介 RSA非对称加密有着非常强大的安全性,HTTPS的SSL加密就是使用这种方法进行HTTPS请求加密传输的.因为RSA算法会涉及Private Key和Public Key分别用来加密和解密,所以 ...

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

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

  10. 【spring实战第五版遇到的坑】第14章spring.cloud.config.uri和token配置项无效

    本文使用的Spring Boot版本为:2.1.4.RELEASE Spring Cloud版本为:Greenwich.SR1 按照书上的做法,在application.yml中配置配置服务器的地址和 ...

随机推荐

  1. BZOJ 1787: [Ahoi2008]Meet 紧急集合 LCA

    1787: [Ahoi2008]Meet 紧急集合 Description Input Output Sample Input 6 4 1 2 2 3 2 4 4 5 5 6 4 5 6 6 3 1 ...

  2. Get Length 使用dynamic关键字

    http://www.codewars.com/kata/566f571ed78037c7b6000036/train/csharp You don't have any idea what is t ...

  3. BZOJ1067 [SCOI2007]降雨量 RMQ???

    求救!!!神犇帮我瞅瞅呗...未完...调了2个半小时线段树,没调出来,大家帮帮我啊!!! 小詹用st表写. 我的思路就是把中间空着的年份设为无限,然后一点点特判就行了...然而没出来... [SCO ...

  4. DCloud-MUI:代码块

    ylbtech-DCloud-MUI:代码块 1.返回顶部 1. 怎么用? html      此底色代表最小触发字符      此底色代表非必要完整触发字符 *需HBuilder7.1+,或者下载m ...

  5. 92. extjs specialkey监听回车按键

    转自:http://blog.sina.com.cn/s/blog_647a022e0101401n.html 1 监听表单字段事件: Ext使得对用户某个动作的监听特别简单,诸如单击某个元素或者按下 ...

  6. 原生JS---8

    原生js学习笔记8——Ajax基础   什么是Ajax 不刷新页面的情况下从服务器获取.提交数据的一种数据交互方式. Ajax使用步骤 1.创建Ajax对象 var httpRequest = new ...

  7. Linux<小白>详细笔记

    目录   应放置的内容 /bin  系统有很多放置执行文件的目录,但是/bin目录比较特殊./bin放置的是在单用户维护模式下还能够被操作的命令.在/bin下面的命令可以被root与一般用户使用. / ...

  8. ACM_名字的价值

    名字的价值 Time Limit: 2000/1000ms (Java/Others) Problem Description: 集训终于开始了,参加集训的人很多,也就有很多名字,集训组织者发现了一件 ...

  9. Coursera公开课-Machine_learing:编程作业5

    Regularized Linear Regression and Bias/Variance 大多数时候,我们使用机器学习方法得到的结果都不是特别理想,常见 欠拟合 和 过拟合 问题.通过一些变量画 ...

  10. SQLServer2008 将“单个用户”改为“多用户”

    一开始是要想要分离掉数据库,然后将其删除 不知道为什么一直分离不了,试了很多次,又尝试直接删除 结果数据库突然显示成了“单个用户” 尝试查看其属性,或者“新建查询”也都报错,提示已经有其他用户建立了连 ...