天天看点

Spring Cloud(八)分布式配置中心Spring Cloud Config

前言

在分布式系统中,会涉及大量的配置文件。项目环境中有:开发环境、测试环境、生产环境。这些环境的配置又是不一样的。例如:数据库的配置、端口号的配置、其他中间件和相关组件的配置都可能不一样。那么,如何更加方便的对这些配置文件进行统一管理和实时更新呢?因为Spring Cloud是全家桶,所以,也提供了配置中心组件Spring Cloud Config,下面就给大家讲解如何使用它。

Spring Cloud Config和注册中心Eureka相似,都有服务端和客户端,Config-Server用来存放配置文件。而Config-Client用来读取配置文件。

Config-Server的搭建

Config-Server也算是一个服务,需要往注册中心中注册。所以,新建一个服务,命名为:config-server,然后在pom中导入约束。

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
           

接着在启动类上加上@EnableConfigServer注解,表示开启配置服务器的功能。Spring Cloud Config可以使用数据库存储配置内容,也可以使用Git仓库存储配置内容。博主这里就用Git当做容器了。当然,大家需要到GitHub的官网上注册一个账号。作为程序员,应该是经常访问这个“全球最大的同性交友网站”,所以,账号什么的就不讲了。

重点就是需要创建一个存放配置的仓库。

Spring Cloud(八)分布式配置中心Spring Cloud Config

只需要填写仓库名称,点击创建即可。因为Git中有分支的概念,所以,master就作为开发环境;新建一个v1.0分支,作为测试环境。关于Git方面的内容,读者可以自行去查阅相关资料。

就以用户服务为例,把配置文件放入配置中心。在master分支,创建一个user-service.yml文件,写入相应的配置文件。

Spring Cloud(八)分布式配置中心Spring Cloud Config

为了测试不同环境,这里添加了两个配置。environment(环境)和branch(分支)。然后,在v1.0分支,同样创建一个user-service.yml文件,写入配置文件。

Spring Cloud(八)分布式配置中心Spring Cloud Config

基本上Git相关的操作就完成了。还需要对config-server的配置文件进行修改。

spring:
  application:
    name: config-server
  #配置中心相关的配置
  cloud:
    config:
      server:
        git:
          #路径
          uri: https://github.com/Qingfengchuiwoxin/config-center
          username: *********
          password: *********
          #配置超时
          timeout: 5
          #默认分支
          default-label: master

server:
  port: 7777

#指定注册中心
eureka:
  client:
    service-url:
      defaultzone: http://localhost:8761/eureka/
           

服务名称、端口号、注册中心,是每一个服务都需要配置的。

配置中心相关的配置:

uri:是Git上配置中心所在仓库的地址,直接复制粘贴到这里就行了。注意的是,不需要结尾的.git

username:Git仓库的用户名。

password:密码。

timeout:指定读取配置文件的超时时间。

default-label:指定默认分支。

上面的配置,读者根据自己的情况自行配置即可。然后,启动服务,进行访问。

http请求地址和资源文件映射如下:

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
           
Spring Cloud(八)分布式配置中心Spring Cloud Config

Spring Cloud Config支持yml、properties、json三种格式的输出,博主喜欢json的方式,所以,不要在意这些。通过这个路径,成功的访问到了Git仓库中的配置文件。这里的environment为dev,branch为dev,是因为配置文件中配置了default-label这个属性。可以在地址栏加上分支名,进行测试。

http://localhost:7777/master/user-service.json

Spring Cloud(八)分布式配置中心Spring Cloud Config

可以看到和第一访问的结果一样,得到的是master分支的内容。

http://localhost:7777/v1.0/user-service.json

Spring Cloud(八)分布式配置中心Spring Cloud Config

带上v1.0分支的路径,就返回了v1.0分支中的配置了。到这里。Config-Server就搭建完成了,那么如何在Config-Client中使用呢?接下来,就给大家讲Config-Client的使用。

Config-Client的搭建

这里就不搭建Config-Client了,就对以前的用户服务进行改造。要使用一个组件,最首要的就是导入约束啦。

<!-- 配置中心客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
        </dependency>
           

然后就是修改配置文件了,注意,这里不能再使用以前的application.yml文件了。需要把文件名改为bootstrap.yml。因为bootstrap.yml是在application.yml之前加载的,至于原因,读者自行查阅相关资料。

#应用名称
spring:
  application:
    name: user-service

  #指定从哪个配置中心读取
  cloud:
    config:
      discovery:
      	#指定服务id
        service-id: config-server
        #开启服务支持
        enabled: true
      #指定哪个分支
      label: v1.0
      
#指定注册中心
eureka:
  client:
    service-url:
      defaultzone: http://localhost:8761/eureka/
           

service-id:对应config-server服务的id。

enable:开启config服务的支持。

label:和前面的配置一样,指定分支。

为了更好地反映测试效果,写一个测试类。

package com.root.project.userservice.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassName: ConfigClilentController
 * @Author: 清风一阵吹我心
 * @Description: TODO
 * @Date: 2019/2/23 16:08
 * @Version 1.0
 **/
@RestController
@RequestMapping("/cloud")
public class ConfigClientController {

    @Value("${environment}")
    private String environment;

    @Value("${branch}")
    private String branch;

    @Value("${server.port}")
    private String port;

    @GetMapping(value = "/config")
    public String getConfig() {
        return "当前分支:" + branch + ",所属环境:" + environment + ",端口号" + port;
    }
}

           

使用@Value注解来读取配置文件中的值,这里就对环境、分支、端口进行读取。

然后,启动注册中心、config-server服务、用户服务。访问:http://localhost:8801/cloud/config

Spring Cloud(八)分布式配置中心Spring Cloud Config

可以看到成功读取配置文件的值,目前处于v1.0分支的测试环境。修改配置文件的label属性,改为master。重启服务。访问:http://localhost:8800/cloud/config

Spring Cloud(八)分布式配置中心Spring Cloud Config

得到了成功的响应。基本上Spring Cloud Config的使用就讲完了。当然。作为Spring Cloud的配置中心组件,这些只是简单的应用,以后会涉及更深的知识,期待与各位下次再见。

这一路,一直为你加油的那个人,是你自己!

继续阅读