Spring Cloud 之配置服务器(上)

学习目标

今天我们要学习的是 Spring Cloud Config Server(配置服务器),首先我们先创建项目:打开 https://start.spring.io/,填写相关信息,项目名为 spring-cloud-chapter-3-config-server,添加 Web、Actuator 以及 Config Server 依赖,点击 “Generate Project” 按钮生成项目,并导入到 idea 中。(注:此处使用的 Spring Boot 版本为 1.X 系列)


一、认识 Spring Cloud 配置服务器

1)Spring Cloud Config Server:
Spring Cloud 配置服务器提供分布式动态化集中管理应用配置信息的能力。

  • 分布式:通过负载均衡将流量分发到不同的配置服务器上
  • 动态化:数据源(Git,数据库)发生变化时,客户端能够感知的到
  • 集中管理:一个配置服务器可能管理多个配置客户端

2)构建 Spring Cloud 配置服务器
使用 @EnableConfigServer 注解标注


二、服务端 Environment 仓储

1)EnvironmentRepository
Spring Cloud 配置服务器管理多个客户端应用的配置信息,然而这些配置信息需要通过一定的规则获取。Spring Cloud Config Server 提供 EnvironmentRepository 接口供客户端应用获取,其中获取维度有三:

  • {application}:配置客户端应用名称,即配置项:spring.application.name
  • {profile}:配置客户端应用当前激活的 Profile,即配置项:spring.profiles.active
  • {label}:配置服务端标记的版本信息,如 Git 中的分支名

2)两种方式搭建 Spring Cloud Config Server

  • 基于文件系统实现
    • spirng.cloud.config.server.git.uri = ${user.dir}/configs
  • 基于 Git 版本控制
    • spirng.cloud.config.server.git.uri = https://github.com/AlanShelby/blogs-temporary.git

3)服务端配置映射

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

三、搭建 Spring Cloud Config Server 之基于文件系统创建本地仓库

上面我们说到了有两种方式可以搭建 Spring Cloud Config Server,我们先来看第一种--基于文件系统创建本地仓库。
1)在启动类中添加 @EnableConfigServer 注解,激活应用配置服务器。

package top.alanshelby.springcloudchapter3configserver;

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

@SpringBootApplication
@EnableConfigServer
public class SpringCloudChapter3ConfigServerApplication {

    public static void main(String[] args) {

        SpringApplication.run(SpringCloudChapter3ConfigServerApplication.class, args);
    }
}

2)创建本地目录

理解 Java 中的 ${user.dir},在 IDE 中是指的当前项目物理路径

可以使用下面代码进行输出:

System.out.println(System.getProperty("user.dir"));

输出的结果为当前项目的路径:

E:\Project\CourseProject\SpringCloud\spring-cloud-chapter\spring-cloud-chapter-3-config-server

在 idea 中 \src\main\resources 目录下创建名为 configs 的目录,它的绝对路径:${user.dir}\\src\\main\\resources\\configs
3)配置 git 本地仓库 uri
在 application.properties 文件中添加如下配置信息:

# 配置服务器文件系统 git 仓库
spring.cloud.config.server.git.uri = ${user.dir}\\src\\main\\resources\\configs

4)给应用 blogs 创建三个环境的配置文件,并添加 name 属性,这三个配置文件均位于 configs 目录下:

  • blogs.properties
    • name = blogs
  • blogs-prod.properties
    • name = blogs-prod
  • blogs-test.properties
    • name = blogs-test

三个文件的环境 profile 分别是:defaultprodtest
5)初始化本地 git 仓库
在 ${user.dir}\src\main\resources\configs 路径下执行以下 git 命令:

- git init
- git add .
- git commit -m "xxx"
出现以下结果表示成功:
 3 files changed, 7 insertions(+)
 create mode 100644 blogs-prod.properties
 create mode 100644 blogs-test.properties
 create mode 100644 blogs.properties

6)测试配置服务器
启动项目,通过浏览器测试应用为 blogs(与创建的三个配置文件名称相对应,具体映射关系可看本文第二部分中的服务端配置映射),Profile 为 test 的配置内容,访问 http://localhost:9090/blogs/test,这时就会看到 blogs.propertiesblogs-test.properties 两个配置文件的信息,请注意:当指定了 Profile 时,默认的 Profile(不指定)配置信息也会输出 blogs.properties


四、搭建 Spring Cloud Config Server 之基于远程 git 仓库

上面我们学习了如何利用文件系统创建本地仓库,接下来我们来看看如何基于远程 git 仓库来 Spring Cloud Config Server。
1)在启动类中添加 @EnableConfigServer 注解,激活应用配置服务器。
2)配置远程 Git 仓库地址

# 配置服务器远程 Git 仓库(GitHub)
spring.cloud.config.server.git.uri = https://github.com/AlanShelby/blogs-temporary.git

3)本地 clone 远程 Git 仓库

https://github.com/AlanShelby/blogs-temporary.git

4)给应用 blogstemp 创建三个环境的配置文件

  • blogstemp.properties
    • name = blogstemp
  • blogstemp-prod.properties
    • name = blogstemp-prod
  • blogstemp-test.properties
    • name = blogstemp-test

三个文件的环境 profile 分别是:defaultprodtest
5)提交到远程 Git 仓库(默认分支为 master,即后面所用到的 label)

 git add blogstemp*.properties
 git commit -m "add blogstemp config files"
 git push

6)配置强制拉取内容

# 强制拉去 Git 内容
spring.cloud.config.server.git.force-pull = true

7)测试配置服务器
启动项目,通过浏览器测试应用为 blogstemp,Profile 为 test 的配置内容,访问 http://localhost:9090/blogstemp/test,这时就会看到 blogstemp.properties 和 blogstemp-test.properties 两个配置文件的信息。

注意:这里的 version 与你 git 提交的 version 是一致的,可在本地使用 git log 命令查看。


五、Spring Cloud 配置客户端

1)创建 Spring Cloud Config Client 应用
创建一个名为 spring-cloud-chapter-3-config-client 的应用

2)在 classPath 下面创建 bootstrap.properties
3)配置 bootstrap.properties
配置以 spring.cloud.config. 开头的配置信息

# 配置客户端应用关联的应用,该配置时可选的,如果不配置,采用 spring.application.name
spring.cloud.config.name = blogstemp
# 关联 profile
spring.cloud.config.profile = prod
# 关联 label
spring.cloud.config.label = master
# 关联 uri
spring.cloud.config.uri = http://localhost:9090/

application.properties 中添加如下配置:

spring.application.name = spring-cloud-config-client
server.port = 8080
management.security.enabled = false

4)先启动 spring-cloud-chapter-3-config-server 然后再启动 spring-cloud-chapter-3-config-client 项目,在 spring-cloud-chapter-3-config-client 启动日志中可以看到如下信息,表示 clien 已经连接到了 server,并取到了 GitHub 上的 blogstemp-prod.properties 配置文件。

Fetching config from server at: http://localhost:9090/

Located environment: name=blogstemp, profiles=[prod], label=master, version=11399ab7d42f35c3282bb2c775f97e2d77b2c0e5, state=null

Located property source: CompositePropertySource [name='configService', propertySources=[MapPropertySource {name='configClient'}, MapPropertySource {name='https://github.com/AlanShelby/blogs-temporary.git/blogstemp-prod.properties'}, MapPropertySource {name='https://github.com/AlanShelby/blogs-temporary.git/blogstemp.properties'}]]

5)测试 Spring Cloud 配置客户端
通过浏览器访问 http://localhost:8080/env


至此,关于Spring Cloud Config Server(配置服务器)就讲解完了,这是我的理解,各位看官如果有不同见解或文章中有错误,请不吝指正。
所用代码码云地址:https://gitee.com/AlanShelby/spring-cloud-chapter
知乎专栏地址:https://zhuanlan.zhihu.com/c_200981602
个人微信公众号:AlanShelby(多多关注,感谢~)

你可能感兴趣的:(Spring Cloud 之配置服务器(上))