前言:对于应用,配制文件通常是放在项目中管理的,它可能有spring、mybatis、log等等各种各样的配置文件和属性文件,另外你还可能有开发环境、测试环境、生产环境等,这样的话就得一式三份,若是传统应用还好说,如果是微服务呢,这样不光配置文件有可能冗余而且量大,繁重复杂,不好维护,这样的话就需要一个配置文件的统一管理了。

一、SpringCloud Config简介

  SpringCloud Config为分布式系统外部化配置提供了服务器端和客户端的支持,它包括ConfigServer和ConfigClient两部分。

    

  Server:

  • 实例一般多于两个,以实现HA;
  • 配置以文件形式存储,快速支持目前以SpringBoot的开发方式的配置文件;
  • 支持GIt,码云,SVN,本地文件等多种形式;
  • 支持属性加密;

  Client:即各自的微服务应用;

  使用SpringCloud BUS配置和借助Git仓库的WebHooks自动刷新;

二、SpringCloud Config基本使用

创建服务端:

  1、前面简单介绍了一下Config,那么首先要做的准备是先到Git仓库或者码云中创建一个项目并新建一些配置文件 spring-cloud-repo

  

  2、创建Maven工程 config-server,添加依赖:

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

  3、创建启动类,并加上开启Config服务端注解@EnableConfigServer:

@SpringBootApplication
@EnableConfigServer
public class ConfigApplication { public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class, args);
} }

  4、添加application属性文件:

server.port=9000
spring.application.name=config-server-9000
spring.cloud.config.server.git.uri=https://gitee.com/lfalex/spring-cloud-repo

  5、启动项目,简单测试,访问:localhost:9000/application/dev,localhost:9000/application-dev.properties:

    访问规则:

      /{appication}/{profile}/[{label}]

      /{application}-{profile}.yml

      /{application}-{profile}.properties

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

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

    它们都可以映射到对应的配置文件{application}-{profile}.properties,其中{label}为具体的分支,默认为master;

  

  

创建客户端(一般为具体的微服务):

  1、创建Maven项目 config-client,添加依赖:

    <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 实现Config的客户端配置 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!-- 实现通过端点refresh手动刷新 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

  2、创建一般启动类即可,无需添加注解,创建Controller,为测试做准备:

    @Value("${version}")
private String version; @RequestMapping("/getVersion")
public String getVersion() {
return this.version;
}

  3、为了更明显的测试Config是否生效,在application配置文件中添加:

server.port=9001

  4、添加bootstrap.properties配置文件,bootstrap.properties为默认文件名,在springcloud中配置文件有个优先级的概念,当本地application.properties文件和bootstrap.properties文件中配置了同样的属性不同的值,由于bootstrap的优先级高,则在bootstrap中的属性不会被application中的覆盖,反而会覆盖掉application中的配置:

#对应着config server所获取配置文件的{application}和URL
spring.application.name=application
spring.cloud.config.uri=http://localhost:9000/
#对应着文件后面的后缀{profile}
spring.cloud.config.profile=dev
#分支
spring.cloud.config.label=master

  5、先启动服务器,再启动客户端,观察端口和页面,由于前面在application中添加了端口为9001,而远程仓库的配置文件中也添加了端口9999:

  

  

这样就实现了基本的远程配置仓库了,但是一旦有文件更改还得重新启动项目,这样就很有问题了,所以需要刷新,使用/refresh端点刷新:

  1、在application或远程文件中添加:

#由于要使用actuator,所以必须要将安全权限关闭
management.security.enabled=false

  2、在controller上添加注解@RefreshScope注解:

@RestController
@RefreshScope //非重启项目手动刷新配置注解
public class ConfigController {
。。。。
}

  3、启动测试,打开,修改version=dev-3.0.0为version=dev-4.0.0,并发送刷新请求http://localhost:9999/refresh,刷新测试页面查看:

  

  

  

三、SpringCloud Bus自动刷新配置

  前面的基于端点刷新,只针对一个服务,若为多个微服务,这样就很繁琐,所以需要一个可以集体刷新或指定刷新的组件=》SpringCloud Bus;

  1、使用SpringCloud Bus需要使用RabbitMQ,未安装的请安装,基于之前的端点刷新的项目,添加依赖:

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

  2、在bootstrap中增加RabbitMQ的配置:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

  3、启动 config-bus-client测试,打开,修改version=dev-3.0.0为version=dev-4.0.0,并发送刷新请求http://localhost:9999/bus/refresh,刷新测试页面查看:

  

  

  

  

  还可以通过Git或者码云的WebHooks来发送修改刷新配置请求:

  

参考书籍:《SpringCloud与Docker微服务架构实战》周力著

代码示例:https://gitee.com/lfalex/springcloud-example( config-server、 config-client、 config-bus-client

SpringCloud-微服务配置统一管理SpringCloud Config(七)的更多相关文章

  1. 【微服务】之三:从零开始,轻松搞定SpringCloud微服务-配置中心

    在整个微服务体系中,除了注册中心具有非常重要的意义之外,还有一个注册中心.注册中心作为管理在整个项目群的配置文件及动态参数的重要载体服务.Spring Cloud体系的子项目中,Spring Clou ...

  2. 从零开始,轻松搞定SpringCloud微服务系列

    本系列博文目录 [微服务]之一:从零开始,轻松搞定SpringCloud微服务系列–开山篇(spring boot 小demo) [微服务]之二:从零开始,轻松搞定SpringCloud微服务系列–注 ...

  3. springcloud(十二)-springcloud-config统一管理微服务配置

    1.为什么要统一管理微服务配置 对于传统的单体应用,常使用配置文件管理所有配置.例如一个SpringBoot开发的单体应用,可将配置内容放在application.yml文件中.如果需要切换环境,可设 ...

  4. 9.Spring Cloud Config统一管理微服务配置

    Spring Cloud Config统一管理微服务配置 9.1. 为什么要统一管理微服务配置 9.2. Spring Cloud Config简介 Spring Cloud Config为分布式系统 ...

  5. SpringCloud微服务基础 Eureka、Feign、Ribbon、Zuul、Hystrix、配置中心的基础使用

    1.单点系统架构 传统项目架构 传统项目分为三层架构,将业务逻辑层.数据库访问层.控制层放入在一个项目中. 优点:适合于个人或者小团队开发,不适合大团队开发. 分布式项目架构 根据业务需求进行拆分成N ...

  6. SpringCloud微服务:Sentinel哨兵组件,管理服务限流和降级

    源码地址:GitHub·点这里||GitEE·点这里 一.基本简介 1.概念描述 Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护服务的稳定性.包括核心的独立类库,监 ...

  7. SpringCloud微服务(01):Eureka组件,管理服务注册与发现

    本文源码:GitHub·点这里 || GitEE·点这里 一.Eureka基本架构 1.Eureka简介 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,SpringCl ...

  8. 【微服务】之七:轻松搞定SpringCloud微服务-API权限控制

    权限控制,是一个系统当中必须的重要功能.张三只能访问输入张三的特定功能,李四不能访问属于赵六的特定菜单.这就要求对整个体系做一个完善的权限控制体系.该体系应该具备针区分用户.权限.角色等各种必须的功能 ...

  9. SpringCloud微服务学习笔记

    SpringCloud微服务学习笔记 项目地址: https://github.com/taoweidong/Micro-service-learning 单体架构(Monolithic架构) Mon ...

随机推荐

  1. [控件] ChangeColorLabel

    ChangeColorLabel 效果 源码 // // ChangeColorLabel.h // YXMWeather // // Created by XianMingYou on 15/6/2 ...

  2. 使用截图工具FastStone Capture

    使用截图工具FastStone Capture -谨以此教程献给某位上进的测试人员- FastStone Capture是本人用过的windows平台上最好用的截图工具,界面简洁,功能强大,还支持屏幕 ...

  3. Linux 文件特殊权限详解[suid/sgid/t]

    setuid(suid): 针对命令和二进制程序的,当普通用户执行某个(passwd)命令的时候,可以拥有这个命令对应用户的权限, 即让普通用户可以以root用户的角色执行程序或命令. setgid( ...

  4. webshell扫描

    可扫描 weevelyshell 生成 或加密的shell 及各种变异webshell 目前仅支持php 支持扫描 weevelyshell 生成 或加密的shell 支持扫描callback一句话s ...

  5. Mysql 安装服务无法启动解决方案与使用的一般使用指令

    问题描述: 在安装mysql 时,如果第一次没安装成功,第二次重装可能出现莫名奇妙的情况.通过一番尝试,发现,安装往上的教程还是无法成功安装的主要原因是第一次安装虽然未成功,但是mysql 默认的33 ...

  6. MFC调试时可以,使用生产的exe时,显示未响应解决方案

    首先,使用release模式,生成解决方案和exe. 对生成的exe,选择属性,兼容性,win7,应用,即可解决. 此方法对debug无用

  7. 026.1 网络编程 获取IP地址

    前面提及的:OSI,TCP-IP,IP地址,端口,协议概念我都清楚,所以我直接跳过前面,来到使用这里. //获取本机IP InetAddress ip = InetAddress.getLocalHo ...

  8. [T-ARA][yayaya]

    歌词来源:http://music.163.com/#/song?id=22704449 U look at me Right T-ARA U Ready Let me seeya LaLaLaLa ...

  9. PHP设计模式系列 - 数据访问对象模式

    数据访问对象模式 数据访问对象模式描述了如何创建透明访问数据源的对象. 场景设计 设计一个BaseDao基类,实现数据库操作基本的一些query,insert,update方法 在实际使用的过程中,继 ...

  10. 【错误记录】uwsgi 启动 flask 出错

    在测试环境使用uwsgi启动flask未成功 正常报错信息: *** Starting uWSGI 2.0.13.1 (64bit) on [Fri Sep 23 09:27:47 2016] *** ...