Config分布式配置中心
Config一般配合bus消息总线一块使用
一、Config介绍:
Spring Cloud Config 解决了在分布式场景下多环境配置文件的管理和维护。
好处:
- 集中管理配置文件
- 不同环境不同配置,动态化的配置更新
- 配置信息改变时,不需要重启即可更新配置信息到服务
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7429CAzW-1629920086935)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210826015312034.png)]
这个外部配置文件可以是在本地磁盘中,也可以是在云端!
二、Config入门:
config-server模块的搭建:
步骤:
1.使用gitee创建远程仓库,上传配置文件:
在gitee上创建一个仓库,用来存储配置文件的,在本地也建一个目录,里面创建一个config-dev.yml的配置文件,提交同步一下。
gitee地址:https://gitee.com/tianyinetwork/config-tianyi.git
2.搭建 config server 模块
4.编写配置,设置 gitee 远程仓库
- pom.xml文件中添加依赖
<!-- config-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
3.导入 config-server 依赖
-
application.yml
server: port: 9527 #config的默认端口是8888 spring: application: name: config-server # Spring Cloud Config cloud: config: server: # git 的 远程仓库地址 git: uri: https://gitee.com/tianyinetwork/config-tianyi.git label: master # 分支配置
-
启动类
@SpringBootApplication @EnableConfigServer // 启用config server功能 public class ConfigServerApp { public static void main(String[] args) { SpringApplication.run(ConfigServerApp.class,args); } }
5.测试访问远程配置文件
访问gitee上的配置文件,访问地址:localhost:9527/master/config-dev.yml
Config-Client服务模块:
1.导入 starter-config 依赖
<!--config client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
2.配置config server 地址,读取配置文件名称等信息
创建一个bootstrap.yml
# 配置config-server地址
# 配置获得配置文件的名称等信息
spring:
cloud:
config:
# 配置config-server地址
uri: http://localhost:9527
# 配置获得配置文件的名称等信息
name: config # 文件名
profile: dev # profile指定, config-dev.yml
label: master # 分支
注意:复制粘贴的时候,缩进可能会出问题,一定要检查,如果出错,会造成@Value读取不到值,直接导致服务启动不了。
3.获取配置值
@Value("${configName}")
private String configName;
4.启动测试
Config客户端刷新配置:
1.在 config 客户端引入 actuator 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2.获取配置信息类上,添加 @RefreshScope 注解(哪里读取了值,哪里就需要刷新,就在类上添加这个注解)
@RefreshScope
3.添加配置(在bootstrap.yml文件中)
# 配置config-server地址
# 配置获得配置文件的名称等信息
spring:
cloud:
config:
# 配置config-server地址
uri: http://localhost:9527
# 配置获得配置文件的名称等信息
name: config # 文件名
profile: dev # profile指定, config-dev.yml
label: master # 分支
management:
endpoints:
web:
exposure:
include: '*' #这样是暴露所有,这样不太安全
management.endpoints.web.exposure.include: refresh
此时,还不能够完成刷新,访问localhost:9527/master/config-dev.yml能够刷新
但访问:localhost:8001/goods/findOne/2就不能够刷新
4.使用curl工具发送post请求,这样就能够让单个服务刷新了,这样还是不太方便,实际应用中我们的服务是很多的,不可能一个一个的刷新,所有后面会有bus消息总线的联合使用
curl -X POST http://localhost:8001/actuator/refresh
三、Config继承Eurek:
(1)、先要让config-server模块注册到Eureka配置中心
-
Eureka-Client依赖
<!-- eureka-client --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
-
启动类上最好添加上注解:
@EnableEurekaClient
-
application.yml配置文件中添加
server: port: 9527 #config的默认端口是8888 spring: application: name: config-server # Spring Cloud Config cloud: config: server: # git 的 远程仓库地址 git: uri: https://gitee.com/tianyinetwork/config-tianyi.git label: master # 分支配置 #将自己注册到Eureka中 eureka: client: service-url: defaultZone: http://localhost:8761/eureka
-
访问eureka的页面:
http://localhost:8761/
查看是否有对应的服务
(2)、config-client端配置:(获取配置信息的客户端)
修改bootstrap.yml文件:(关键在于注释掉原本的uri,配置上discovery)
# 配置config-server地址
# 配置获得配置文件的名称等信息
spring:
cloud:
config:
# 配置config-server地址
# uri: http://localhost:9527
# 配置获得配置文件的名称等信息
name: config # 文件名
profile: dev # profile指定, config-dev.yml
label: master # 分支
# 从注册中心寻找config-server地址
discovery:
enabled: true
service-id: CONFIG-SERVER
management:
endpoints:
web:
exposure:
include: '*' #这样是暴露所有,这样不太安全
g-dev.yml
label: master # 分支
从注册中心寻找config-server地址
discovery:
enabled: true
service-id: CONFIG-SERVER
management:
endpoints:
web:
exposure:
include: ‘*’ #这样是暴露所有,这样不太安全