SpringCloudConfig

分布式系统配置管理的解决方案。包含Client和Server。配置文件存放在Server端,通过接口的形式提供给Client。

主要功能

  • 集中管理各个环境,各个微服务的配置文件
  • 提供服务端和客户端的支持
  • 配置文件修改之后,马上生效(不需要重启)
  • 配置文件通过git/svn进行管理,支持版本回退
  • 支持高并发

ConfigServer

    • 需要添加ConfigServer依赖
    • 需要添加@EnableConfigServer注解在启用类上
    • 添加配置文件
# 应用名称
spring.application.name=cloudconfig
server.port=8081
# 配置文件仓库地址
spring.cloud.config.server.git.uri=https://gitee.com/lizhi68/springcloudconfig.git
# 仓库某个配置文件的目录
spring.cloud.config.server.git.search-paths=client1
# 仓库账号/密码
spring.cloud.config.server.git.username=1580424756@qq.com
spring.cloud.config.server.git.password=xxxxxxxx

接口访问规则

/{application}/{profile}/{label}
/{application}-{profile}.yml
/{application}/{profile}.properties
/{label}/{application}-{profile}.yml
/{label}/{application}-{profile}.properties
application:表示配置文件名前缀或者项目文件夹名都可以
profile:表示配置文件profile,例如:prod,test,dev
label:表示git分支,参数可填可不填,默认master
配置及时提交到远程仓库,能够及时刷新

配置

这里的{application}占位符,表示Client配置的name属性值
{profile}表示Client配置的profile属性值
{label}表示Client配置的label属性值

spring.cloud.config.server.git.search-paths={application}

classpath配置

spring.profiles.active=native
或spring.cloud.config.server.native.search-locations=指定绝对路径


ConfigClient

  1. 添加依赖ConfigClient依赖
  2. 添加web依赖

添加bootstrap.properties配置(加载顺序在application.properties之前)

spring.application.name=client1
spring.cloud.config.profile=test
spring.cloud.config.label=master
spring.cloud.config.uri=http://localhost:8081
server.port=8082

测试

@RestController
public class HelloController {
    @Value("${lizhi}")
    String lizhi;

    @GetMapping("/hello")
    public String hello(){
        return lizhi;
    }
}

动态刷新
当git的配置文件更新之后,只有ConfigServer可以及时查询最新数据。但是ConfigClient并不能做到。

  1. 添加依赖
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  1. 添加配置,暴露refresh端点
management.endpoints.web.exposure.include=refresh
  1. 给需要及时获取实时信息的地方添加@RefreshScope注解
    • 先调用refresh端点
    • 在获取对应接口,就可以获取最新数据

动态刷新——SpringCloudBus

请求重试

正常来说,配置了连接指向ConfigServer,启动ConfigClient项目时,如果没有连接成功是不会报错的,只有在调用相应接口时才会报错。

  1. 添加依赖
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

<dependency>
  <groupId>org.springframework.retry</groupId>
  <artifactId>spring-retry</artifactId>
</dependency>
  1. 配置文件
    开始快速响应
spring.cloud.config.fail-fast=true

配置重试机制

# 请求重试的初始间隔时间
spring.cloud.config.retry.inital-interval=1000
# 最大重试次数
spring.cloud.config.retry.max.attempts=6
# 重试时间间隔乘数
spring.cloud.config.retry.multiplier=1.1
# 最大间隔时间
spring.cloud.config.retry.max-interval=1000

加密

  • 不可逆加密(MD5,SHA)
  • 可逆加密
  • 1 . 对称加密(加密/解密的密钥是一样的:des、aes)
  • 2 . 非对称加密(加密/解密的密钥不一样,有公钥,私钥:RSA)

对称加密

  1. 配置JCE

将下载的jce的jar包放入JDK的lib/security文件夹下

  1. 在ConfigServer项目的bootstrap.properties配置密钥
encrpt.key=lizhi
  1. 访问http://localhost:8081/encrypt,post请求。

在body体中添加明文,可以进行加密返回密文
将原有配置文件的明文替换成密文加上{cipher}前缀

非对称加密

  1. 使用kettool命令生成密钥对
keytool -genkeypair -alias config-server -keyalg RSA -keystore 
D:\cloud\config-server.ketstore

将生成的store文件放在ConfigServer的resources目录下

  1. 在ConfigServer的bootstrap.properties配置
encrypt.key-store.location=config-server.keystore
encrypt.key-store.alias=config-server
encrypt.key-store.password=111111
encrypt.key-store.secret=111111

安全管理

防止用户直接通过ConfigServer看到配置文件信息,可以使用SpringSecurity来保护ConfigServer接口。

  1. ConfigServer添加SpringSecurity依赖
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-security</artifactId>
</dependency>
  1. ConfigServer配置SpringSecurity加密的账户/密码
spring.security.user.name=lizhi
spring.security.user.password=123456
  1. ConfigClient的bootstrap.properties配置访问ConfigServer的账户/密码,与ConfigServer的对应
spring.cloud.config.username=lizhi
spring.cloud.config.password=123456

服务化

之前的配置都是在ConfigClient中之间指向对应的ConfigServer,与Eureka并无关系。

  1. 先让ConfigServer、ConfigClient都注册到Eureka上,添加依赖
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-boot-starter-netflix-eureka-client</artifactId>
</dependency>
  1. ConfigServer、ConfigClient都注册到Eureka上去
eureka.client.service-url.defaultZone=http://localhost:1111/eureka

修改ConfigClient的配置文件,不用写死ConfigServer地址了。

# 开通eureka获取ConfigServer的功能
spring.cloud.config.discovery.enabled=true
# 配置configServer的服务名称
spring.cloud.config.discovery.service-id=config-server

注意:加入eureka client之后,启动ConfigServer会报错。需要重新生成一个jks格式的密钥

keytool -genkeypair -alias mytestkey -keyalg RSA -keypass 111111 -keystore
D:\cloud\config-service.jks -storepass 1111111

生成的文件cp到ConfigServer的resources目录下,同时修改bootstrap.proerties配置


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • 管理微服务配置 对于单体应用架构来说,会使用配置文件管理我们的配置,这就是之前项目中的application.pr...
    渠唐阅读 220评论 0 0
  • 阅读前须知: Spring Cloud 构建于 Spring Boot 之上,在 Spring Boot 中有两种...
    赵紫枫阅读 320评论 0 0
  • Spring Cloud Config 目录 快速开始客户端使用 Spring Cloud Config服务器环境...
    dinel阅读 439评论 0 0
  • 一、介绍:   在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组...
    CarlosBen阅读 1,815评论 0 5
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,468评论 16 22