Config使用入门
一、为什么需要配置中心
在单体应用中,我们通常使用配置文件来保存应用需要的一些配置信息,但是在微服务架构中,服务都是分布式的,部署在多台机器上,如果想要更改某一个配置,就等对所有服务器的配置文件进行修改和重启,这个工作量和重启时间是不能接受的。因此,配置中心应运而生。
配置中心通常被用作集中管理不同环境下、不同集群下的配置信息,支持在修改配置后实时地更新推送到各个服务器上。SpringCloud Config是一个集中化的外部配置分布式系统,由服务端和客户端两个部分组成,不依赖注册中心,是一个独立的配置中心。SpringCloud Config支持多种存储配置信息的方式,比如jdbc、svn、git等,这里以git为例进行讲解。
二、Config Server服务端的配置
2.1 config仓库的创建
首先我们需要创建一个git仓库,用来存储配置的内容,比如下面这个目录:
config配置的git仓库其中config-git是文件夹名称,sc-config是仓库名称,server-info是仓库中的一个目录文件,其下包含dev、stg、prd三个配置文件,其中的内容各自是:
dev:cn.springcloud.book.config=dev
stg:cn.springcloud.book.config=stg
prd:cn.springcloud.book.config=prd
然后我们需要将修改的内容提交并推送到远程git仓库,这里省略该步骤。
2.2 config server项目的创建
从start.sping.io上一键下载config服务端项目:
一键生成config-server项目然后在启动类上加上@EnableConfigServer
注解,表示开启SpringCloud Config的服务功能。
最后在修改配置文件application.propertis如下:
spring.application.name=config-server
server.port=9090
# 指定远程仓库地址
spring.cloud.config.server.git.uri=https://gitee.com/zhangxun165/sc-config.git
spring.cloud.config.server.git.username=zhangxun165
spring.cloud.config.server.git.password=**********
# 指定需要在仓库下的那个目录文件中查找配置文件
# 可以同时添加多个目录,相互之间用逗号隔开
spring.cloud.config.server.git.search-paths=server-info
然后我们就可以启动项目了。此时访问如下的URL就能获得对应环境的配置内容:
http://localhost:9090/config-info/dev/master
关于访问路径:
- config-info是配置文件名称前缀;
- dev/stg/prd是配置文件名称中表示环境信息的;
- master表示分支版本,默认不写为master;
三、Config Client客户端的配置
3.1 config client项目的创建
同样,先从start.spring.io上一键下载包含config client的项目:
一键生成config-client项目踩坑经验:本实例springcloud版本是2020.0.3,需要再手动引入如下的maven依赖,否则client会启动报错:No spring.config.import property has been defined,引入内容如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
然后我们创建一个远程config实体类,用于表示远程配置中心上的配置内容:
@Component
@ConfigurationProperties(prefix = "cn.springcloud.book")
public class ConfigInfoProperties {
private String config;
public String getConfig() {
return config;
}
public void setConfig(String config) {
this.config = config;
}
}
由于远程仓库中的配置内容是这样的cn.springcloud.book.config=dev
,所以需要配置前缀,使得属性config比较简单。
为了从客户端获取远程配置中心的配置内容,我们可以再创建一个接口Controller:
@RestController
public class ConfigController {
@Autowired
private ConfigInfoProperties configInfo;
@GetMapping("/getConfig")
public String getConfig(){
return configInfo.getConfig();
}
}
最后,application.properties配置文件如下:
server.port=9091
spring.application.name=config-client-demo
还有bootstrap.properties配置文件如下:
# 表示要请求Git仓库的哪个分支
spring.cloud.config.label=master
# config server的地址
spring.cloud.config.uri=http://localhost:9090
# 配置文件名称前缀
spring.cloud.config.name=config-info
# 配置文件环境profile信息
spring.cloud.config.profile=dev
到此,springcloud config client的实例就搭建好了,先启动server端,再启动client端,访问http://localhost:9091/getCofig
就可以获取dev环境的配置内容了。
然而,如果我们在git仓库中修改了配置内容,config server是能够立即获取到最新的内容的,但是config cllient却需要重启之后才可以。如何免重启获取最新的配置内容,后面文章再讲解。