一、概念
- 为什么学习Config
- 分布式系统中,项目比较多,配置文件没有统一管理的方式
- 配置文件分散在不同项目中,修改起来比较麻烦
- 配置文件存在安全性问题
- 配置文件修改后的动态刷新,无法实现的
- Config介绍:
- 将配置文件编写在Git仓库中。
- 通过ConfigServer拉取Git仓库中的配置信息。
- 其他服务作为ConfigClient与ConfigServer进行交互,拉取到相应的配置信息
二、搭建ConfigServer
- 准备Git仓库,并编写配置文件,命名规则:服务名-环境名.yml
- 创建SpringBoot项目
- 导入依赖:spring-cloud-config-server,spring-cloud-starter-netflix-eureka- client,spring-boot-starter-web
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>
- 启动类添加注解:@EnableConfigServer
@SpringBootApplication
@EnableConfigServer
public class ConfigServerStarterApp {
public static void main(String[] args) {
SpringApplication.run(ConfigServerStarterApp.class,args);
}
}
- 编写配置文件:
# 其他配置略…………
spring:
cloud:
config:
server:
git:
uri: https://gitee.com/qianfeng_laozheng/configserver.git #指定Git仓库地址
- 启动项目访问Git上的配置文件信息:http://ip:port/branch/application-profile.yml 运行结果
三、搭建ConfigClient
- ConfigClient要通过与ConfigServer交互获取到Git上的配置文件信息
- 创建SpringBoot项目
- 导入依赖:spring-cloud-starter-config,spring-cloud-starter-netflix-eureka-client,spring-boot-starter-web
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
- 创建配置文件,命名为:bootstrap.yml
# eureka在哪
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
# configserver在哪
spring:
application:
name: configclient
cloud:
config:
discovery:
enabled: true
service-id: CONFIGSERVER
label: master
profile: dev
# 加载ConfigServer中的配置,会通过 /${label}/${spring.application.name}-${profile}.yml
# http://localhost:8888/master/configclient-dev.yml
- 编写bootstrap.yml文件:
- EurekaServer所在的地址
- 开启ConfigServer并且指定ConfigServer在Eureka中的名称
- 指定当前服务名称
- 指定使用的配置文件的分支以及环境
- 通过上述配置,可以获取如下内容:http://configserver的地址/分支/服务名称-环境.yml
- 后续在git上添加配置文件时,推荐先在项目中编写,再复制过去。。。。。。。
四、实现手动配置刷新(可以配置)
- Gitlab中的配置文件被修改之后,手动的发送一个请求给任意一个有bus组件的服务。
- 将ConfigServer作为通知的服务:
- 导入依赖:spring-cloud-starter-bus-amqp,spring-boot-starter-actuator
- 编写配置文件:
- 连接上RabbitMQ服务的ip,port,username………… 配置actuator的配置:
management:
endpoints:
web:
exposure:
include: "*"
- 启动ConfigServer,再RabbitMQ的监控界面中,查看到SpringCloudBus的队列被 创建了
修改ConfigClient服务:
- 导入依赖:spring-cloud-starter-bus-amqp
- 编写配置文件:连接上RabbitMQ服务的ip,port,username…………(放在git上)
- 创建Controller类,并且再类上添加@RefreshScope:
@RestController
@RefreshScope
public class TestController {
@Value("${version}")
public String version;
@GetMapping("/version")
public String version(){
return version;
}
}
测试功能:
- 访问configclient中的/version路径 — v1.0.0
- 修改Git仓库中的配置,将v1.0.0修改为v2.0.0
- 手动发送请求给ConfigServer:http://configserver路径/actuator/bus-refresh,发送POST请求
- 再次访问configclient中的/version路径 — v2.0.0
五、实现自动刷新配置(可以配置)
- 让Git远程仓库可以通过ip和port找到你当前ConfigServer所在的位置
- 下载并安装natapp软件
- 打开:http://natapp.cn
- 注册账号,登录,购买免费的隧道,设置当前隧道映射的端口地址
- 下载natapp程序,并复制一份config.ini,并添加authtoken的隧道密钥
- 双击运行natapp.exe文件
- 再Git仓库中配置WebHooks