Config-Server
Config-Server简介
Spring Cloud配置中心,就是将每个服务的配置都集合在一个地方。这个地方要么是github,要么是国内gitee码云。通过config-server,可以在一个地方集中对所有环境(服务)进行外部化配置管理。例如,当一个服务从开发环境到测试环境,然后再从测试环境切换到生产环境,你可以统一使用config-server来统一管理这些环境之间的配置,并确保该环境在迁移时能够拥有它运行需要的一切配置。简而言之:config-server就是用来实现配置统一管理和不同环境间配置的切换。
config-server分发图
Config-server最小案例
开发流程:1、创建config服务
2、配置依赖,更换开发环境2.2.5.RELEASE,版本管理,consul注册中心,健康检查,config-server配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.5.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.demo</groupId><artifactId>config</artifactId><version>0.0.1-SNAPSHOT</version><name>config</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><spring-cloud.version>Hoxton.SR6</spring-cloud.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--consul注册中心的依赖 因为eureka2.0已经停止更新 所以就没有去用他--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency><!--这个包是用来健康监控的--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!--config server 配置中心 配置--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
3、配置远程仓库、我这里采用的是国内gitee,注册账号,创建仓库
4、新仓库配置,确认提交
5、新建配置文件
6、增加内容,确认提交就好
7、复制这个地址,到我们项目的properties中配置
、
8、properties配置
#指定端口后
server.port=7878
#config在注册中心的地址
spring.application.name=configserver
#注册中心地址
spring.cloud.consul.host=localhost
#注册中心端口
spring.cloud.consul.port=8500#gitee远程仓库地址
spring.cloud.config.server.git.uri=https://gitee.com/G_wen/cloud-server-config.git#私有仓库的话就需要账号和密码
#spring.cloud.config.server.git.username=
#spring.cloud.config.server.git.password=
9、启动类添加注解
@SpringBootApplication
@EnableDiscoveryClient //客户端发现的注解 害怕注册中心看不到这个服务
@EnableConfigServer //configserver 注解 表示这个是一个config服务
public class ConfigApplication {public static void main(String[] args) {SpringApplication.run(ConfigApplication.class, args);}}
10、启动看效果,这里访问的路径是:http://localhost:7878/product-dev.properties,原本文件时product.properties,但是springcloud官方文档要求我们这样访问
可以有三种访问格式,propeties结尾的
yml结尾的
json结尾的
11、名字没有指定环境,他就是默认的dev环境,如果我们创建了dev的环境配置,那么显示的内容会优先加载一般配置,dev的会追加在后面
再次访问,将dev的直接追加在后面
分支管理
1、配置的分支管理。如果我们再加一个分支,例如dev的话,我们项目单独去访问这个分支,不去走master分支
2、修改一下product-dev.properties中的内容,一会访问的时候以便区分,再properties中去增加配置
spring.cloud.config.server.git.default-label=dev
3、访问效果
本地仓库管理
1、config-server每次都是从gitee上拉取内容到本地仓库,本地仓库读取相应的配置文件,我们如果没有指定本地仓库路径,系统会自动为我们指定,下面是控制台为我们输出的默认仓库
2021-01-31 16:30:30.832 INFO 16020 --- [nio-7878-exec-2] o.s.c.c.s.e.NativeEnvironmentRepository : Adding property source: file:/C:/Users/Geek/AppData/Local/Temp/config-repo-6875966835209491844/product.properties
2、自己指定仓库路径,在properties配置文件中,加上配置,并创建相应的文件
#指定从gitee上下载下来的资源存放的目录
spring.cloud.config.server.git.basedir=F:\\practiceProject\\demo\\config7878\\src\\main\\resources\\localconfig
3、运行以后
ConfigClient客户端
配置中心客户端,客户端的配置properties不再从本地加载,而是同时configserver,得到远程仓库配置的properties配置,再启动项目。现在搭建一个实例,将configclient注册到consul注册中心,configclient注册到注册中心,properties配置就需要配置注册中心地址,但是这个时候我把这个地址放在gitee上,如果client服务能成功注册到consul,说明client成功加载了配置。
开发步骤:1、创建client微服务
2、引入依赖,和一般的客户端一样,consul注册、健康检查、openfeign、hytrix降级熔断、新增config依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.5.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.demo</groupId><artifactId>configclient</artifactId><version>0.0.1-SNAPSHOT</version><name>configclient</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><spring-cloud.version>Hoxton.SR6</spring-cloud.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--consul注册中心的依赖 因为eureka2.0已经停止更新 所以就没有去用他--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency><!--这个包是用来健康监控的--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!--引入openfeign依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--服务熔断 降级--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><!--加入configclient的依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
3、properties配置,保留了服务注册名,其他个性化的私有配置
#将公共配置放在gitee上#设置端口号
#server.port=9098
#设置应用名称
spring.application.name=configclient
#设置注册中心的网址
#spring.cloud.consul.host=localhost
#设置访问注册中心的port
#spring.cloud.consul.port=8500#私有配置
#让微服务开启向配置中心拉取配置的功能
spring.cloud.config.discovery.enabled=true
#找到配置中心 service-id
spring.cloud.config.discovery.service-id=configserver
#从仓库的哪一个分支拉去配置 注意这个是分支
spring.cloud.config.label=dev
#拉取仓库中的文件 指定名称
spring.cloud.config.name=client
#指定配置文件环境 注意这个是环境
spring.cloud.config.profile=dev
4、在gitee上创建配置,创建三个环境的配置
5、启动类配置一下注解
@SpringBootApplication
@EnableDiscoveryClient //其实配不配无所谓 但还是配置一下
public class ConfigclientApplication {public static void main(String[] args) {SpringApplication.run(ConfigclientApplication.class, args);}}
6、有一点需要注意,properties的名字需要改成bootstrap.properties,不然会出现连接超时的情况,详情参考博客:https://blog.csdn.net/qq_44349459/article/details/113481856
7、启动确保没有问题,启动时注册到consul,端口从gitee上获取成功
8、查看consul注册中心,注册成功
Configclient手动刷新配置
服务客户端每次启动都会从远程仓库重新加载配置,如果我们自己开发需要在gitee上更改配置,那么重新启动服务便可以了。但是已经上线的项目,不可能随时开关,我们的项目肯定是随时开着的。那么我们在更改giee配置的时候,就需要主动的更新配置到我们正在运行的客户端服务。手动刷新就是主动发送更新请求到client客户端。
开发流程:1、在properties中增加配置
#开启所有web端点暴露 这个就是为了手动刷新的时候能够得到请求
management.endpoints.web.exposure.inclue=*
2、这时候还需要配置一个请求接收的接口类,访问这里就可以看到更改的相应信息
package com.demo.configclient.controller;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RefreshScope //刷新当前区域
public class RefreshController {private Logger logger = LoggerFactory.getLogger(RestController.class);@Value("${server.port}")private int port; //拿到配置的端口@Value("${name}")private String name; //拿到配置的名字//用来做测试的 表示这里刷新能够访问最新的配置@GetMapping("/configtest")public String test() {logger.info("name---->{},port---->{}", name, port);return name + ":" + port;}
}
3、记得启动一下项目,让这些配置生效。访问接口,查看一下原本的值是啥。
4、将gitee的配置改一下,然后用postman发送一下请求,超这个地址访问:http://localhost:9098/actuator/refresh。postman下载地址:
5、访问了以后,再取看一下
总结
本章介绍了config-server是个怎样的组件。配置的中转站,configserver连接远程仓库gitee,访问gitee分支,指定本地配置仓库。configclient客户端配置如何从configserver拉取,如何在不重启configclient的情况下,更改了gitee配置,手动的将configclient配置给更改。
Config-Server相关推荐
- 玩转Spring Cloud之配置中心(config server config client)
玩转Spring Cloud之配置中心(config server &config client) 本文内容导航: 一.搭建配置服务中心(config server) 1.1.git方式 1 ...
- 为Spring Cloud Config Server配置远程git仓库
简介 虽然在开发过程,在本地创建git仓库操作起来非常方便,但是在实际项目应用中,多个项目组需要通过一个中心服务器来共享配置,所以Spring Cloud配置中心支持远程git仓库,以使分散的项目组更 ...
- 配置SpringCloud Config Client连上Config Server
SpringCloud Config Client实际上就是连接到Config Server的普通应用,前面一篇文章 SpringCloud Config Server搭建 已经介绍了如何搭建一个Co ...
- SpringCloud Config Server搭建
文章目录 1 创建Git仓库 2 创建应用配置文件 3 将应用配置文件commit到Git仓库中 4 创建Config Server应用 5 配置运行Config Server 6 访问Config ...
- 微服务SpringCloud—Config Server对称加密
配置内容的加解密 在Git仓库中明文存储配置属性的.很多场景下,对于某些敏感的配置内容(例如数据库账号.密码等),应当加密存储. Config对称加解密 1.安装JCE 默认情况下我们的JRE自带了J ...
- 测试一个config server 服务器挂机后,集群是否能读写数据
测试架构: 测试目的: 测试一个config server 服务器挂机后,集群是否能读写数据. 测试原因: 上周因为内存吃紧,准备添加内存.在查看服务器时,把一台服务器关机检查. 关机后,WE ...
- spring cloud: 使用consul来替换config server,config key/value 具体的配置详解
1.先添加依赖 之前config server的依赖去掉,换成consul-config的依赖即可. <dependency><groupId>org.springframew ...
- spring cloud: 使用consul来替换config server
上一篇提到了,eureka 2.x官方停止更新后,可以用consul来替代,如果采用consul的话,其实config server也没必要继续使用了,consul自带kv存储,完全可以取代confi ...
- java测试spring cloud_java – 从Spring引导单元测试中排除Spring Cloud Config Server
鉴于我有以下3豆: @Component public class ServiceConfig { // This value is only available from the Spring Cl ...
- Spring Cloud Config Server简介
1.概述 在本教程中,我们将回顾Spring Cloud Config Server的基础知识. 我们将设置一个Config Server ,然后构建一个客户端应用程序 ,该客户端应用程序在启动时会消 ...
最新文章
- html5 静态网页 线程,HTML5 Web Workers之网站也能多线程的实现
- 2016.01.19 UITextField
- 目前可用的微博秀的嵌入方法大全(亲测2019年2月仍有效)
- hexo的yelee主题更换类别以及tags的字体颜色
- Android7.0反射类找不到的问题
- python新手输出错误,Python 新手常犯错误(第一部分)
- 鸿蒙渊之后是什么任务,都说这次主线好,那我来唱唱反调吧
- 【Oracle】闪回表
- 【BZOJ3675】【Apio2014】序列分割
- uwsgi基础——参数
- oreilly免费电子书
- Python学习七文件和数据格式化
- Linux磁盘空间管理利器--ncdu(为你的 系统瘦身)
- 全同高校名称MySQL数据表
- Xtts v4 xttdriver.pl xtt.properties
- 使用注册表reg文件修复git bash git gui 右键快捷方式
- 生物识别技术在汽车领域带来了巨大变革
- java float 判断整数_判断一个数是否是整数
- 鞍点(saddle point)
- Html怎么判断ie5,css怎样判断IE浏览器?
热门文章
- Android Studio 播放bibi声音
- 中国农超对接模式产业竞争动态格局与建设经营分析报告2022-2028年
- Python3监控IP丢包率
- 280049的时钟树
- [骑驴找马]ETAGEERF和Agent*Go
- 智慧医院系统定制|慢病管理系统更全面
- 系统接口日志记录-AOP
- android播放器 慢速,能慢放视频的手机软件 安卓手机视频慢放,把视频速度调整为1/2X...
- Docker:MacOS环境下修改容器的端口号
- PB加密,PBD加密,杜绝PB程序反编译,PB加密工具