配置中心 Spring Cloud Config
1. 目标
- 了解配置中心的作用
- 能配置Git仓库
- 能搭建配置中心
- 修改微服务,从配置中心获取修改的配置
2. 讲解
2.1 Config简介
分布式系统中,由于服务数量非常多,配置文件分散在不同微服务项目中,管理极其不方便。为了方便配置文件集中管理,需要分布式配置中心组件。在Spring Cloud中,提供了Spring Cloud Config,它支持配置文件放在配置服务的本地,也支持配置文件放在远程仓库Git(GitHub、码云)。配置中心本质上是一个微服务,同样需要注册到Eureka服务中心!
【配置中心的架构图】
2.2 Git配置管理
2.3远程Git仓库
- 知名的Git远程仓库有国外的GitHub和国内的码云(gitee);
- GitHub主服务在外网,访问经常不稳定,如果希望服务稳定,可以使用码云;
- 码云访问地址:http://gitee.com
测试地址:
https://gitee.com/skllll/config.git
2.4 创建远程仓库
首先使用码云上的git仓库需要先注册账户
账户注册完成,然后使用账户登录码云控制台并创建公开仓库
配置仓库 名称和路径
2.5创建配置文件
在新建的仓库中创建需要被统一配置管理的配置文件
文件命名有规则:
配置文件的命名方式:{application}-{profile}.yml或{application}-{profile}.properties application为应用名称 profile用于区分开发环境dev,测试环境test,生产环境pro等 开发环境 user-dev.yml 测试环境 user-test.yml 生产环境 user-pro.yml
创建一个user-provider-dev.yml文件
将user-provider工程里的配置文件application.yml内容复制进去。
创建完user-provider-dev.yml配置文件之后,gitee中的仓库如下:
2.6 搭建配置中心微服务
实现步骤:
1. 创建配置中心SpringBoot项目config_server 2. 配置坐标依赖 3. 启动类添加开启配置中心服务注解 4. 配置服务中心application.yml文件 5. 启动测试
实现过程:
(1)创建工程
工程坐标
<artifactId>config-server</artifactId> <groupId>com.itheima</groupId> <version>1.0-SNAPSHOT</version>
(2)pom.xml依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>springcloud-parent</artifactId> <groupId>com.itheima</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>config-server</artifactId> <dependencies> <!-- Eureka客户端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!--配置中心--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> </dependencies> </project>
(3)创建启动类
在config-server
工程中创建启动类com.itheima.ConfigServerApplication
,代码如下:
@SpringBootApplication @EnableDiscoveryClient//开启Eureka客户端发现功能 @EnableConfigServer//开启配置服务支持 public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class,args); } }
(4)application.yml配置文件
# 注释版本 server: port: 18085 # 端口号 spring: application: name: config-server # 应用名 cloud: config: server: git: # 配置gitee的仓库地址 uri: https://gitee.com/skllll/config.git # Eureka服务中心配置 eureka: client: service-url: # 注册Eureka Server集群 defaultZone: http://127.0.0.1:7001/eureka # com.itheima 包下的日志级别都为Debug logging: level: com: debug
注意:上述spring.cloud.config.server.git.uri是在码云创建的仓库地址
(5)测试
启动config-server
,访问<http://localhost:18085/user-provider-dev.yml>
,效果如下:
可以查看到码云上的文件数据,并且可以在gitee上修改user-dev.yml,然后刷新上述测试地址也能及时更新数据
2.7 服务去获取配置中心配置
目标:改造user-provider工程,配置文件不再由微服务项目提供,而是从配置中心获取。
实现步骤:
1. 添加配置中心客户端启动依赖 2. 修改服务提供者的配置文件 3. 启动服务 4. 测试效果
实现过程:
(1)添加依赖
<!--spring cloud 配置中心--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>
(2)修改配置
删除user-provider工程的application.yml文件
创建user-provider工程bootstrap.yml配置文件,配置内容如下
# 注释版本 spring: cloud: config: name: user-provider # 与远程仓库中的配置文件的application保持一致,{application}-{profile}.yml profile: dev # 远程仓库中的配置文件的profile保持一致 label: master # 远程仓库中的版本保持一致 discovery: enabled: true # 使用配置中心 service-id: config-server # 配置中心服务id #向Eureka服务中心集群注册服务 eureka: client: service-url: defaultZone: http://127.0.0.1:7001/eureka
关于application.yml和bootstrap.yml文件的说明:
- bootstrap.yml文件是SpringBoot的默认配置文件,而且其加载时间相比于application.yml更早。 - bootstrap.yml和application.yml都是默认配置文件,但定位不同 - bootstrap.yml可以理解成系统级别的一些参数配置,一般不会变动 - application.yml用来定义应用级别的参数 - 搭配spring-cloud-config使用application.yml的配置可以动态替换。 - bootstrap.yml相当于项目启动的引导文件,内容相对固定 - application.yml文件是微服务的常规配置参数,变化比较频繁
启动测试:
启动服务中心、配置中心、用户中心user_service
如果启动没报错,其实已经使用上配置中心内容了
可以在服务中心查看也可以检验user_service的服务
2.8 配置中心存在的问题
(1)修改码云配置文件
修改在码云上的user-provider-dev.yml文件,添加一个属性test.message,如下操作:
(2)读取配置文件数据
在user-provider
工程中创建一个com.itheima.controller.LoadConfigController
读取配置文件信息,代码如下:
@RestController @RequestMapping(value = "/config") public class LoadConfigController { @Value("${test.message}") private String msg; /*** * 响应配置文件中的数据 * @return */ @RequestMapping(value = "/load") public String load(){ return msg; } }
启动运行user-provider
,访问<http://localhost:18081/config/load>
修改码云上的配置后,发现项目中的数据仍然没有变化,只有项目重启后才会变化。
3 小结
-
配置中心的作用:将各个微服务的配置文件集中到一起进行统一管理。
-
能搭建配置中心
需要在application.yml配置文件中指定需要远程更新的仓库地址。
- 修改微服务,从配置中心获取修改的配置
properties 创建bootstrap.yml,并在bootstrap.yml中配置 # 注释版本 spring: cloud: config: name: user-provider # 与远程仓库中的配置文件的application保持一致,{application}-{profile}.yml profile: dev # 远程仓库中的配置文件的profile保持一致 label: master # 远程仓库中的版本保持一致 discovery: enabled: true # 使用配置中心 service-id: config-server # 配置中心服务id #向Eureka服务中心集群注册服务 eureka: client: service-url: defaultZone: http://127.0.0.1:7001/eureka