【Spring Cloud总结】32.编写Config Server

时间:2022-08-09 01:01:26


接上篇《​​31.Spring Cloud Config简介​​》  Spring Cloud版本为Finchley.SR2版

上一篇我们了解了Spring Cloud的统一配置管理(Spring Cloud Config)的基础知识和组件介绍,本篇我们就来编写Spring Cloud Config的服务端。
本部分官方文档:​​​https://cloud.spring.io/spring-cloud-static/Finchley.SR4/single/spring-cloud.html#_spring_cloud_config_server​​ 注:好像Finchley.SR2的文档已经挂了,最新的是Finchley.SR4的文档。

我们来回顾一下上一篇Spring Cloud Config的架构图:

【Spring Cloud总结】32.编写Config Server


通过该图我们知道,Config Client客户端都通过Config Server服务端获取相应环境(dev开发、stage预发布、prod生产)的配置,然后Config Server再从后端存储中(上图为Git)拉取配置参数、属性。

这里我们就来动手编写一个Config Server服务端。

一、新建Config Server服务工程

在工作空间中新建一个名为“microserver-config-server”的Maven工程:

【Spring Cloud总结】32.编写Config Server

【Spring Cloud总结】32.编写Config Server

然后在POM文件中引入Spring Cloud的父工程、config-server的依赖:

<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">
<modelVersion>4.0.0</modelVersion>
<artifactId>microserver-config-server</artifactId>
<name>microserver-config-server</name>

<parent>
<groupId>com.microserver.cloud</groupId>
<artifactId>microserver-spring-cloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>

</project>

注意,这里为了便于版本统一管理,该工程的parent父工程和我们User、Movie工程一样,均依赖于microserver-spring-cloud工程(此父工程统一引入了spring-cloud-dependencies的Finchley.SR2版,这个在前面的章节已经讲过)。

父工程pom.xml的modules中别忘记加入这个新工程(microserver-config-server):

<modules>
<module>microserver-provider-user</module>
<module>microserver-consumer-movie</module>
<module>microserver-discovery-eureka</module>
<module>microserver-discovery-eureka-high-availability</module>
<module>microserver-hystrix-dashboard</module>
<module>microserver-hystrix-dashboard-turbine</module>
<module>microserver-getaway-zuul</module>
<module>microserver-file-upload</module>
<module>microserver-sidecar</module>
<module>microserver-config-server</module>
</modules>

然后我们新建启动类,在启动类中,添加“@EnableConfigServer”注解,以开启Zuul的代理功能:

package com.microserver.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}

然后在resource文件夹下创建application.yml,配置一下端口,以及拉取配置的后端存储的uri路径:

server:
port: 8090
spring:
cloud:
config:
server:
git:
uri: file://${user.home}/config-repo

这里的路径一般是远端数据仓库的地址,我们常用版本管理仓库来实现,这里我们就创建一个码云的gitee仓库来作为配置的后端存储。

二、配置远端gitee仓库

这里我们登录码云的网站,注册一个账号,然后进行登录:

【Spring Cloud总结】32.编写Config Server


登录成功后,点击个人头像左侧的“+”号,选择“新建仓库”:

【Spring Cloud总结】32.编写Config Server


然后进入仓库创建页面,填写必须字段,进行仓库的创建:

【Spring Cloud总结】32.编写Config Server


然后我们的测试仓库就创建成功了:

【Spring Cloud总结】32.编写Config Server


然后点击“克隆/下载”,将git地址复制下来:

【Spring Cloud总结】32.编写Config Server


这个就是我们仓库的git地址:

​https://gitee.com/jackzhucoder/Spring-Cloud-Config-Test.git​​然后我们在本地硬盘中创建一个名为“gitee”的文件夹,作为本地仓库,然后下载Git工具(访问:https://git-scm.com/downloads下载即可, ),下载完毕后,打开cmd,输入git --version,如果出现版本号,则证明安装成功:

【Spring Cloud总结】32.编写Config Server

右键点击生成本地文件夹,选择“git GUI here”使用git的图形化界面:

【Spring Cloud总结】32.编写Config Server

【Spring Cloud总结】32.编写Config Server


然后选择上面的克隆已有仓库的选项,然后填写前面我们复制的仓库地址,目标文件夹为D:/gitee/Spring-Cloud-Config-Test:

【Spring Cloud总结】32.编写Config Server


点击“Clone”后,远程仓库的文件就被拉进来了:

【Spring Cloud总结】32.编写Config Server


然后我们在D:/gitee/Spring-Cloud-Config-Test下加入dev开发、stage预发布、prod生产的各个application.yml配置文件:

【Spring Cloud总结】32.编写Config Server


里面的内容分别为:“type: dev”、“type: stage”和“type: prod”。然后回到gui,点击“Rescan”刷新仓库,检测出有变动的文件:

【Spring Cloud总结】32.编写Config Server


然后选择stage预提交:

【Spring Cloud总结】32.编写Config Server


然后填写提交信息commit Message,并点击commit提交本地仓库:

【Spring Cloud总结】32.编写Config Server


然后点击push,将本地仓库信息提交到远程仓库,并按提示输入相关的账号密码:

【Spring Cloud总结】32.编写Config Server

【Spring Cloud总结】32.编写Config Server


然后可以看到代码push成功了:

【Spring Cloud总结】32.编写Config Server


提交成功之后,我们刷新码云的页面,可以看到刚刚的配置文件提交成功:

【Spring Cloud总结】32.编写Config Server

三、Config Server获取配置信息

此时回到我们的Config Server服务上来,将刚刚配置文件的uri修改为我们新建的gitee仓库:

server:
port: 8090
spring:
cloud:
config:
server:
git:
uri: https://gitee.com/jackzhucoder/Spring-Cloud-Config-Test

注:原地址后面的“.git”可以不要。

然后我们直接启动Config Server微服务,来准备访问我们的远端配置。

使用Config Server微服务访问远端配置文件,可以直接通过RESTful风格的URL形式访问,类似为“http://127.0.0.1:8090/+配置”这种形式,有关配置的映射规则,Spring Cloud提供了以下几种方式:

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

上面的{label}为标签 ,{application}为应用标识,{profile}为版本类型。

那么我们刚刚的其中一个application-dev.yml文件,就可以使用下面的路径访问:

​​ http://127.0.0.1:8090/application-dev.yml​​ 访问结果:

【Spring Cloud总结】32.编写Config Server


另外两个文件信息:

【Spring Cloud总结】32.编写Config Server

【Spring Cloud总结】32.编写Config Server


如果有多个分支,可以在文件前面加载分支的标签,如我们的文件在master分支上,就是:

​​ http://127.0.0.1:8090/master/application-prod.yml​​ 不加分支默认访问master分支。如果我们更改{application},如果不存在的话,默认还是会以“application”的配置:

【Spring Cloud总结】32.编写Config Server

当然,如果我们输入一个不存在的配置,默认是什么都没有的(一个是json信息,一个会显示无默认配置文件,仅为“{}”):

【Spring Cloud总结】32.编写Config Server

【Spring Cloud总结】32.编写Config Server

我们可以在文件夹下放置一个名为application.yml的配置文件(提交至远程仓库),作为默认版本的配置文件:

【Spring Cloud总结】32.编写Config Server


文件内容为“type:default”。此时我们再访问不存在的版本配置,就会指向默认配置文件:

【Spring Cloud总结】32.编写Config Server

以上就是Config Server的搭建和仓库的连接,以及访问配置的方式介绍。下一篇我们继续讲解如何搭建Config Server客户端,以及客户端如何读取Config Server的配置。

参考:《51CTO学院Spring Cloud高级视频》