Config概述
在分布式环境里面,很多服务都要做集群部署,那意味着这些服务都要提供一样的服务,所以它们的配置文件必须相同;所以提取一个配置文件中心,让它能够从一个中心处拉取配置文件,这样就能保证所有的配置都相同;在修改时,也只需要修改一个地方就可以了。
SpringCloud **Config为微服务架构中的微服务提供集中化的外部配置的支持;**配置服务器为各个不同的微服务应用所有环境提供了一个中心化的外部配置;Config分为服务端和客户端两部分。
Config服务端:
也称为配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置住处、加密、解密住处等访问接口。Config客户端:
则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取加载配置信息。配置服务器:
默认使用git来存储配置住处,这样有助于对环境配置进行版本管理,并可以通过git客户端工具来方便的管理和访问配置内容。
服务端创建:
第一步:pom文件
<!--config服务端的依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
第二步:启动类添加注解**@EnableConfigServer**
package com.mmy; //标记为config服务端 @EnableConfigServer @SpringBootApplication public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); } }
第三步:配置文件
#配置文件中心的服务名称 spring.application.name=config-server #配置文件中心的端口 -- 一般都是8888 8889 server.port=8888 #--------------------和git的关联配置----------------------------------------------- #gitee上的配置文件远程仓库的url地址 spring.cloud.config.server.git.uri=*** #gitee上的配置文件远程仓库中存放配置文件的目录路径 spring.cloud.config.server.git.search-paths=*** #登录gitee的用户名 spring.cloud.config.server.git.username=*** #登录gitee的密码 spring.cloud.config.server.git.password=*** #将gitee上的配置文件远程仓库中的配置文件缓存到本地的位置 spring.cloud.config.server.git.basedir=***
客户端搭建:
第一步:pom文件
<!--config客户端的依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>
第二步:配置文件
#config客户端的服务名称 spring.application.name=config-client #config客户端的端口 server.port=8080 #---config客户端从配置中心(config服务端)拉取配置文件的配置--- #配置中心(config服务端)的url地址 spring.cloud.config.uri=http://localhost:8888 #配置文件的读取规则是: #/{label}/{name}-{profile}.properties 或 /{label}/{name}-{profile}.yml #label是配置文件位于的分支名称,例如master主分支 #name是配置文件名称的前缀,例如config-dev.properties #profile是配置文件名称的环境,例如config-dev.properties spring.cloud.config.label=master spring.cloud.config.name=config spring.cloud.config.profile=dev
解决读取脏读:
当git中的配置文件修改后,但是客户端读取的数据依旧是修改前的数据,存在脏读;
解决方法:借助Bus消息总线来解决