一、简介
我们知道每一个服务都有着大量的配置,然而其中很多都是相同的配置,并且每次配置后都要重启。SpringCloudConfig则可以通过集中化的外部配置进行统一的管理,并且无需重启应用使得配置修改生效.
SpringCloud基于C/S架构,分为服务器端和客户端。
- 服务器端(分布式配置中心):用来连接仓库,并为客户端提供获取配置信息等接口。
- 客户端:各个服务实例,从分布式配置中心获取应用资源与业务相关的配置信息.
二、简单使用
0.创建配置中心连接的配置仓库
仓库详情:
配置文件内容:
提交仓库指令:
配置文件命名:配置文件不要随便命名,需要遵循一定的规范
1.搭建服务器端(Config Server 6001)
- 导入依赖:注意是server,不要导错了
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
2.修改yml文件,设置配置中心连接的仓库信息
cloud:
#config服务器端配置
config:
server:
git:
uri: git@github.com:wantao666/SpringCloud2020-config.git #github项目地址
search-paths:
-SpringCloud2020-config
default-label: master #读取分支
- 启动类上加上
@EnableConfigServer
注解
@SpringBootApplication
@EnableEurekaClient
@EnableConfigServer
public class ConfigMain6001 {
public static void main(String[] args) {
SpringApplication.run(ConfigMain6001.class, args);
}
}
完成后访问localhost:6001/master/config-dev.yml
可以直接访问到存储在github的配置文件
2.搭建客户端(Config Client 6002)
- 导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
-
新建
bootstrap.yml
文件application.yml:
用户级配置文件
bootstrap.yml:
系统级配置文件,优先级更高cloud: #config客户端配置 config: #读取配置文件${uri}/${label}/${name}-${profile}.yml 即:http://localhost:6001/master/config-dev.yml label: master #分支 name: config profile: dev uri: http://localhost:6001
-
创建接口访问配置信息
@RestController
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
配置完成后,访问http://localhost:6002/config/info
3.动态刷新
当我们修改掉github中配置文件信息,不重启访问Config Server 6001
,发现配置信息也修改掉了,但是我们不重启访问Config Client 6002
,发现配置信息并没有随着github中的配置文件信息被修改掉,只有重启才能显示最新的配置信息。但是很明显,我们需要在微服务不重启的情况下使得修改的配置文件信息生效
,这就是动态刷新.
1.手动动态刷新
- 导入actuator依赖,对项目进行监控
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- 暴露actuator监控的结点
#暴露actuator监控所有结点
management:
endpoints:
web:
exposure:
include: "*"
- 在控制类上加上
@RefreshScope
注解
@RestController
@RefreshScope
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
4.发送post
请求:http://localhost:6002/actuator/refresh
注意:
出现状况:配置完成后启动Config Client 6002
没有报错,但是程序自己又结束了,启动不起来
解决方法:忘记导入web依赖了…😢
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
相关源码:https://github.com/wantao666/SpringCloud2020
转载:https://blog.csdn.net/qq_45453266/article/details/104969237