talk is cheep, show your the code

废话不多说,直接开干

本文基于 2.1.1版本

github地址

例如我们目前将配置放在了github上的这个目录下

Server端

pom.xml

需要添加一个依赖,一般我们配置中心和注册中心可以放在一起,因此我就和eureka注册服务器一起了

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

server的application.yml

导入了jar包,按照spring的尿性,当然是要继续写配置信息了

server:
port: 8761 eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: service-center cloud:
config:
server:
git:
uri: # 你的git地址
# git账号
username: '你的账号'
# git密码
password: '你的密码'
# 默认从master分支读取配置文件
default-label: develop # for test
# 配置文件的路径,因为我项目的根目录是 my-demo,因此这里查询的路径就是 m.../conf-repo, 可以配置多个,按逗号分割
search-paths: microservice/conf-repo #

配置文件

关于配置文件,必须按照约定的命名, 就是 {application}-{profile}.properties{application}-{profile}.yml,不这么命名的话,是没法后面被加载到的

例如我创建的文件名为 demo-dev.properties,里面的内容为

 version=1

name=demo

测试Server

spring cloud config会将文件生成对应的接口,

明显看出接口是按照 {application}/{profile} 这样的方式来自动生成的

官方文档表明有以下几种

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

client端

pom.xml

需要导入一个jar包

        <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>

添加配置文件,不是application.yml

spring cloud config 通过bootstrap.yml 中的内容来对配置文件进行读取

spring:
cloud:
config:
discovery:
enabled: true
# 对应配置中心的 spring.application.name
service-id: service-center
# name 表示配置文件的 {application} 部分
name: demo
# profile 表示配置文件的 {profile}部分
profile: dev
# label 表示 git上的分支
label: develop
# uri 表示 访问配置中心的uri
uri: http://localhost:8761/

测试的controller

@RestController
public class ConfigClientController { @Value("${version}")
private String v; @GetMapping("/get")
public String get(){
return this.v;
} }

测试client

启动,然后发送http请求 http://localhost:8989/get

读取多个配置文件

我们的配置文件可能需要读取的不止一个,那么要怎么配置呢,查看了官方文档以后,配置的方式如下

我们添加一个属性 demo-prod.properties

spring:
profiles:
active: dev,prod # 添加这个属性可以读取多个文件
cloud:
config:
discovery:
enabled: true
service-id: service-center
# name 表示配置文件的 {application} 部分
name: demo
# profile 表示配置文件的 {profile}部分
# profile: dev
# label 表示 git上的分支
label: develop
# uri 表示 访问配置中心的uri
uri: http://localhost:8761/

相应的,controller的代码也需要进行修改

@RestController
public class ConfigClientController { @Value("${version}")
private String v; @Value("${namespace}")
private String ns; @GetMapping("/get")
public String get(){
return this.v;
} @GetMapping("/namespace")
public String getNs(){
return this.ns; // 应该得到 demo
} }

配置更新

spring cloud config 能够监听github上配置的变化,但它不会进行进行变化的通知,而是需要client自己主动的进行pull的操作,将配置更新

这里就需要引入 spring-cloud-starter-actuator了。

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

application.yml中添加配置属性,将更新的接口暴露出来

management:
endpoints:
web:
exposure:
include: refresh

在我们希望能够进行配置更新的地方,添加注解 @RefreshScope

@RestController
@RefreshScope
public class ConfigClientController { @Value("${version}")
private String v; @Value("${namespace}")
private String ns; @GetMapping("/get")
public String get(){
return this.v;
} @GetMapping("/namespace")
public String getNs(){
return this.ns;
} }

到此,我们的准备工作就好了,然后启动,访问/get接口,然后修改配置文件,再访问的时候还是旧的值,这个时候使用工具进行post的调用

刷新结束后,再次访问

在github上可以通过配置webhook的方式,当有新的push操作时,让github去调用 client的refresh接口

这个方案在client数量较少是还可以,但数量一多,并且每次新增机器都需要修改webhook,显然不够智能,因此后面就需要考虑使用 spring-cloud-bus来进行解决了

spring cloud config —— git配置管理的更多相关文章

  1. Spring Cloud Config 分布式配置管理 5.3

    Spring Cloud Config简介 在传统的单体式应用系统中,我们通常会将配置文件和代码放在一起,但随着系统越来越大,需要实现的功能越来越多时,我们又不得不将系统升级为分布式系统,同时也会将系 ...

  2. spring cloud config git库文件搜索顺序

    spring.cloud.config.server.git.uri只配置到仓库那一层就行了,需要访问仓库的子目录的话就配置spring.cloud.config.server.git.searchP ...

  3. Spring Cloud Config git版

    由于在学习这块内容的时候还不会使用gitHub所以就用了osc的码云 config server POM文件 <dependency> <groupId>org.springf ...

  4. Spring Cloud Config采用数据库存储配置内容

    在之前的<Spring Cloud构建微服务架构:分布式配置中心>一文中,我们介绍的Spring Cloud Server配置中心采用了Git的方式进行配置信息存储.这一设计巧妙的利用Gi ...

  5. spring cloud学习(六)Spring Cloud Config

    Spring Cloud Config 参考个人项目 参考个人项目 : (希望大家能给个star~) https://github.com/FunriLy/springcloud-study/tree ...

  6. 【Spring Cloud】Spring Cloud Config 实现分布式配置中心

    Spring Cloud Config 实现分布式配置中心 一.分布式配置中心 分布式系统中,往往拥有大量的服务应用,而每个应用程序都需要有对应的配置文件来协助完成服务环境初始化.运行.因此生产了大量 ...

  7. Spring Cloud Config采用Git存储时两种常用的配置策略

    由于Spring Cloud Config默认采用了Git存储,相信很多团队在使用Spring Cloud的配置中心时也会采用这样的策略.即便大家都使用了Git存储,可能还有各种不同的配置方式,本文就 ...

  8. 微服务SpringCloud之Spring Cloud Config配置中心Git

    微服务以单个接口为颗粒度,一个接口可能就是一个项目,如果每个项目都包含一个配置文件,一个系统可能有几十或上百个小项目组成,那配置文件也会有好多,对后续修改维护也是比较麻烦,就和前面的服务注册一样,服务 ...

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

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

随机推荐

  1. 【网盘下载加速器】可爆破提取码 加速高达20M以上

    [软件名称]:网盘下载加速   [软件版本]:1.0.0   [软件大小]:3.95MB   [支持系统]:Android,4.4+及更高版本   [测试系统]:小米   [使用说明]:一款小巧的网盘 ...

  2. 【ubantu 安装Jmeter和Jdk环境】

    Linux环境安装Java(含安装包下载地址) 一定要使用有权限的用户 1.下载JDK压缩包,下载地址:https://blog.csdn.net/duketyson2009/article/deta ...

  3. 前端使用canvas生成盲水印的加密解密

    为了保障信息安全,防止重大信息泄露,并且能够锁定泄露用户,需要对页面展示的图片加入当前用户信息的盲水印,即最终图片外观看起来和原图一样,但是经过解码以后可以识别出水印信息,并且在截图后仍能进行较好的识 ...

  4. Docker(二):Docker镜像仓库Harbor搭建

    安装docker-compose 因为docker-compose下载容易失败, 所以选择从github下载方式安装. [root@harbor ~]# mv docker-compose-Linux ...

  5. gcc编译阶段打印宏定义的内容

    背景 总所周知,代码量稍微大一点的C/C++项目的一些宏定义都会比较复杂,有时候会嵌套多个#if/#else判断分支和一堆#ifdef/#undef让你单看代码的话很难判断出宏定义的具体内容. 如果有 ...

  6. openstack高可用集群17-openstack集成Ceph准备

    Openstack集成Ceph准备 Openstack环境中,数据存储可分为临时性存储与永久性存储. 临时性存储:主要由本地文件系统提供,并主要用于nova虚拟机的本地系统与临时数据盘,以及存储gla ...

  7. Python科学计算库Numpy

    Python科学计算库Numpy NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 1.简 ...

  8. Autofac的基本使用---4、使用Config配置

    Autofac的基本使用---目录 准备 使用的表是Student,创建相关的IDAL.DAL.IBLL.BLL层. 使用EF,创建一个Model层,存放edmx文件. 创建一个Infrastruct ...

  9. EF生成模型时Disigner中无信息

    原博文 http://blog.sina.com.cn/s/blog_a1b63a730101ezs4.html 说明 DbContext是对ObjectContext的简化封装.原来的ObjectC ...

  10. .net网站快速停机设置app_offline

    在根目录防止一个app_offline.htm文件即可,文件内容自己设置,空白也是可以的,这样的话网站即可实现快速停机,方便维护和升级 有问题可以联系我,我的邮箱是:yxxrui@163.com,我的 ...