Spring Cloud Config研究详解

简介

在分布式系统中,每一个功能模块都能拆分成一个独立的服务,一次请求的完成,可能会调用很多个服务协调来完成,为了方便服务配置文件统一管理,更易于部署、维护,所以就需要分布式配置中心组件了,在spring cloud中,有分布式配置中心组件spring cloud config,它支持配置文件放在在配置服务的内存中,也支持放在远程Git仓库里。引入spring cloud config后,我们的外部配置文件就可以集中放置在一个git仓库里,再新建一个config server,用来管理所有的配置文件,维护的时候需要更改配置时,只需要在本地更改后,推送到远程仓库,所有的服务实例都可以通过config server来获取配置文件,这时每个服务实例就相当于配置服务的客户端config client,为了保证系统的稳定,配置服务端config server可以进行集群部署,即使某一个实例,因为某种原因不能提供服务,也还有其他的实例保证服务的继续进行。

分享一个在网上看到架构图

 

 

文档

中文:https://springcloud.cc/spring-cloud-config.html

官网:http://spring.io/projects/spring-cloud-config

Documentation:

https://cloud.spring.io/spring-cloud-config/spring-cloud-config.html

demo

idea:

工程:sc-f-chapter6

Config Server

 

配置文件:application.properties
 

spring.cloud.config.server.git.uri:配置git仓库地址

spring.cloud.config.server.git.searchPaths:配置仓库路径

spring.cloud.config.label:配置仓库的分支

spring.cloud.config.server.git.username:访问git仓库的用户名

spring.cloud.config.server.git.password:访问git仓库的用户密码

---------------------

 

远程仓库

https://github.com/AlertGao/respo 中有个文件config-client-dev.properties文件中有一个属性:foo = foo version 3

启动程序:

访问http://localhost:8888/foo/dev

 

config client

配置文件bootstrap.properties

spring.application.name=config-client

spring.cloud.config.label=master

spring.cloud.config.profile=dev

spring.cloud.config.uri= http://localhost:8888/

server.port=8881

spring.cloud.config.label 指明远程仓库的分支

 

spring.cloud.config.profile

 

dev开发环境配置文件

test测试环境

pro正式环境

spring.cloud.config.uri= http://localhost:8888/ 指明配置服务中心的网址。

 

访问地址

http://localhost:8881/hi

代码分析:

  • 核心接口是EnvironmentRepository,提供配置的读取
 public interface EnvironmentRepository {
      Environment findOne(String application, String profile, String label);
  }

·  EnvironmentRepository有多种实现,基于JDBC、SVN、GIT等等

·  默认情况下,使用的是 MultipleJGitEnvironmentRepository(可以配置多个地址的GIT数据源)

·  ConfigServerAutoConfiguration -> EnvironmentRepositoryConfiguration -> DefaultRepositoryConfiguration

 

 

·  MultipleJGitEnvironmentRepository 代理遍历每个 JGitEnvironmentRepository, JGitEnvironmentRepository 下使用 NativeEnvironmentRepository 代理读取本地文件。

·  AbstractScmEnvironmentRepository#findOne

 

Spring cloud config server 缓存问题

问题描述:

获取不到配置库中更新的内容。
 

配置库缓存到config server本地问题。

Spring cloud config server 

git or svn 配置文件 会缓存到下面目录,centos,

/tmp/config-repo-xxx随机字符串 eg /tmp/config-repo-6766910347602329244

win 操作系统类似

 

你可以通过设置spring.cloud.config.server.git.basedir参数值为非系统临时目录

问题分析:

Spring cloud config server 

git or svn 配置文件 会缓存到下面目录,centos,

/tmp/config-repo-xxx随机字符串 eg /tmp/config-repo-6766910347602329244

win 操作系统类似

解决问题:

  1. 删除缓存目录,让config server 重新到配置库中获取最新内容
  2. 为项目添加spring-boot-starter-actuator依赖,该依赖包含了/refresh端点,用于配置的刷新。
  1. <dependency>
  2.       <groupId>org.springframework.boot</groupId>
  3.       <artifactId>spring-boot-starter-actuator</artifactId>
  4.     </dependency>

 

  1.  Controller上添加注解@RefreshScope。添加@RefreshScope的类会在配置更改时得到特殊处理
  2. 发送post请求到http://127.0.0.1:8881/actuator/refresh,结果返回

注意:1post   2springCloud2.0以后

  1. 再次访问http://localhost:8881/hi 返回结果为:
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值