一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情。
微服务已经成当前各大大厂追求的主流技术架构,学习微服务前景非常可观,而SpringCloud已成为主流微服务技术栈。本系列文章将以SpringCloud技术栈进行精讲,全方位剖析讲解SpringCloud技术栈在微服务场景下的实战应用,可以点赞关注,后续持续为大家更新。
Spring Cloud Config
知识索引
- Spring Cloud Config简介
- 案例演示
1 Spring Cloud Config简介
分布式系统中,由于服务数量非常多,配置文件分散在不同微服务项目中,管理极其不方便。为了方便配置文件集中管理,需要分布式配置中心组件。在Spring Cloud
中,提供了Spring Cloud Config
,它支持配置文件放在配置服务的本地,也支持配置文件放在远程仓库Git
(GitHub
、码云
)。配置中心本质上是一个微服务,同样需要注册到注册中心
2 案例演示
2.1 创建远程仓库
我们在码云创建一个git
仓库用来存储配置信息,真实场景下需搭建git
私服
2.2 创建配置文件
在仓库中新建文件命名为config_dev.yml
并将gateway_demo
的配置文件内容拷贝进去
2.3 搭建配置中心微服务
在spring_cloud_demos
项目中新增spring_cloud_config_demo
模块
2.3.1 添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR12</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
复制代码
2.3.2 启动类
/**
* @Author: yang
*/
@EnableConfigServer
@EnableDiscoveryClient
@SpringBootApplication
public class ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class,args);
}
}
复制代码
代码说明:
@EnableDiscoveryClient:由于其他服务需要通过注册中心拉取配置中心服务的配置信息,所以配置中心服务必须注册到注册中心
@EnableConfigServer:开启配置中心服务端
复制代码
2.3.3 配置文件
server:
port: 1500 # 端口号
spring:
application:
name: config-server # 应用名
cloud:
config:
server:
git:
# 配置gitee的仓库地址
uri: https://gitee.com/itmentu/spring_cloud_config_demo.git
consul:
host: 192.168.184.128
port: 8500
discovery:
service-name: ${spring.application.name}
register: true
# com.itheima 包下的日志级别都为Debug
logging:
level:
com.itmentu: debug
复制代码
2.3.4 启动测试
访问
http://localhost:1500/config_dev/master
复制代码
可以看到如下结果,说明配置成功
2.4 从配置中心拉取配置信息
接下来改造gateway_demo
实现从配置中心拉取配置信息
2.4.1 添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
复制代码
2.4.2 配置文件
新增bootstrap.yml
配置文件并删除原本的applicaiton.yml
,内容如下:
server:
port: 8502
# 基本应用信息
spring:
cloud:
consul:
host: 192.168.184.128
port: 8500
discovery:
service-name: ${spring.application.name}
register: false
config:
name: config # 与远程仓库中的配置文件的application保持一致,{application}-{profile}.yml
profile: dev # 远程仓库中的配置文件的profile保持一致
label: master # 远程仓库中的版本保持一致
discovery:
enabled: true # 使用配置中心
service-id: config-server # 配置中心服务id
复制代码
代码说明:
1:bootstrap.yml文件是SpringBoot的默认配置文件,而且其加载时间相比于application.yml更早。
2:bootstrap.yml和application.yml都是默认配置文件,但定位不同
2.1:bootstrap.yml相当于项目启动的引导文件
2.2:application.yml文件是微服务的常规配置参数,变化比较频繁
3:搭配spring-cloud-config使application.yml的配置可以动态替换。
4:由于拉取配置文件需要通过注册中心拉取,所以注册中心的配置必须在这里
复制代码
2.4.3 测试
启动gateway_demo
,访问
http://localhost:8502/api/consumer/hello-feign
复制代码
结果
说明配置中心生效