SpringCloud实战五:统一配置中心

栏目: Java · 发布时间: 5年前

内容简介:Hello大家好,我是初晨,本章我们学习SpringCloud 的统一配置中心的使用。大家有问题和意见可以发邮箱mr_beany@163.com简单来说就是将项目中的配置放到统一的服务下进行管理,既可以保证配置内容的安全和权限有可以保证不重启服务就能更新服务配置。例如线上数据库信息一般不会对开发人员开放等等1:创建过程与

Hello大家好,我是初晨,本章我们学习SpringCloud 的统一配置中心的使用。大家有问题和意见可以发邮箱mr_beany@163.com

一:为什么需要统一配置中心

简单来说就是将项目中的配置放到统一的服务下进行管理,既可以保证配置内容的安全和权限有可以保证不重启服务就能更新服务配置。例如线上数据库信息一般不会对开发人员开放等等

二:创建统一配置中心

1:创建过程与 SpringCloud 实战二:Client的创建和高可用 一样

创建好的目录如下

SpringCloud实战五:统一配置中心

2:打开pom文件,添加依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>复制代码

3:修改启动类,使该服务变成config的server端

添加注解@EnableConfigServer

SpringCloud实战五:统一配置中心

4:创建远程git仓库

可以选择gitHub,码云或自己的私服git服务器,这里我使用的是码云

SpringCloud实战五:统一配置中心

新建一个文件

SpringCloud实战五:统一配置中心

将client服务的配置文件内容拷贝到文件,并提交

SpringCloud实战五:统一配置中心

5:配置config服务的git地址

修改application.yml

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

spring:
  application:
    name: config
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/beany/config-juejindome
          username: mr_beany@163.com
          password: 2ewed678wediwen复制代码

其中uri为git的仓库地址,username为git用户名,password为git密码

6:启动项目,浏览器输入

http://localhost:8084/client-dev.yml

SpringCloud实战五:统一配置中心

我们可以看到就是我们添加到git的内容

查看控制台,我们也可以发现已经将git远程文件拉取到本地git

SpringCloud实战五:统一配置中心

那么如果我们想修改拉取的文件路径呢?

修改配置文件:

spring:
  application:
    name: config
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/beany/config-juejindome
          username: mr_beany@163.com
          password: zy555566...
          basedir: D:\work\file\juejinDome\cloudTest\configBasedir复制代码

重新启动之后打开对应的目录已经可以看到拉取的配置文件

SpringCloud实战五:统一配置中心

说明:如果想将不同环境下相同的配置统一提取出来,我们需要在远程git上新建client.yml。这样每次访问不同环境下的yml时,会将client.yml与client-dev.yml进行合并之后再使用。

7:那么为什么我们的文件是client.yml,地址栏中要访问client-dev.yml呢?

访问指定配置文件,有以下几种形式

/{name}—{profites}.yml
/{tabel}/{åame}—{profiles}.yml
name 服务名
profiles 环境
tabet 分支(branch)
.yml  指定返回的数据格式,也可以写成.json  .properties   他会自动转换成指定的格式复制代码

8:测试数据格式

SpringCloud实战五:统一配置中心

SpringCloud实战五:统一配置中心

9:测试访问不同环境

将git上client.yml重命名为client-dev.yml

SpringCloud实战五:统一配置中心

修改内容为:

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

spring:
  application:
    name: client
evn: 
  dev复制代码

再新建一个文件

SpringCloud实战五:统一配置中心

SpringCloud实战五:统一配置中心

SpringCloud实战五:统一配置中心

ps:注意一下这里应该是env不是evn,手误打错了

三:使用统一配置中心

1:添加依赖

打开client服务的pom文件,添加如下依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-client</artifactId>
</dependency>复制代码

2:修改client服务的配置文件,配置config

首先,修改配置文件的名称,由 application.yml 修改为 bootstrap.yml

spring:
  application:
    name: client
  cloud:
    config:
      enabled: true
      discovery:
        service-id: CONFIG
      profile: dev复制代码

这里我们删除了对于Eureka的配置,重新启动之后,发现仍然可以注册到Eureka上去,说明配置生效

SpringCloud实战五:统一配置中心

注意:由于生产环境中eureka肯定不止启动一个,所以在实际情况中,需要将 关于eureka的配置 也要写在bootstrap.yml中,即:

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
spring:
  application:
    name: client
  cloud:
    config:
      discovery: 
        enabled: true
        service-id: CONFIG
      profile: dev复制代码

四:动态修改配置文件不重启即生效

当我们client服务启动时,会去config配置中心拉取配置,config再从远程git上拉取配置,那么当启动之后我们再修改配置文件时,client服务是不会生效的,那么我们怎么处理这种情况呢?

这里我们使用队列来进行处理,当git上文件发生变化时,由队列来通知各个服务来实现更新配置文件

1:引入依赖

打开config服务的pom文件,添加依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>复制代码

2:启动RabbitMQ

在上一章我们已经讲解了怎么使用 Docker 安装启动RabbitMQ,现在我们就把它用起来。

3:修改config服务的配置文件

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

spring:
  application:
    name: config
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/beany/config-juejindome
          username: mr_beany@163.com
          password: zy555566...
          basedir: D:\work\file\juejinDome\cloudTest\configBasedir
  rabbitmq:
    host: 192.168.88.134
    username: user
    password: password复制代码

添加rabbitmq的地址账号密码信息,重新启动。

登陆rabbitmq的管理页面 http://192.168.88.134:15672

SpringCloud实战五:统一配置中心

我们可以看到这里SpringCloud BUS已经为我们创建好了一个队列

4:修改client服务的pom文件

添加如下依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>复制代码

5:修改git上client服务的配置文件client-dev.yml

添加如下配置

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
spring:
  application:
    name: client
  rabbitmq:
    host: 192.168.99.100
    username: user
    password: password
env: 
  test复制代码

6:重新启动client

SpringCloud实战五:统一配置中心

MQ中已有两个队列消息。

7:创建TestController.java

package com.chuchen.client.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description:
 * @Author:
 * @CreateDate: 2019/4/24 11:17
 */
@RestController
@RefreshScope
public class TestController {

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

    @GetMapping("/printEnv")
    public String printEnv(){
        return env;
    }
}复制代码

其中@RefreshScope为配置文件自动刷新

8:浏览器输入

http://localhost:8081/printEnv

SpringCloud实战五:统一配置中心

可以获取到我们写在git上的配置的。

9:修改config服务的配置文件

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

spring:
  application:
    name: config
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/beany/config-juejindome
          username: mr_beany@163.com
          password: zy555566...
          basedir: D:\work\file\juejinDome\cloudTest\configBasedir
  rabbitmq:
    host: 192.168.99.100
    username: user
    password: password
management:
  endpoints:
    web:
      exposure:
        include: "*"复制代码

这里我们选择开放一个接口,这个接口的作用是当git上文件发生变化时,通知我们系统重新更新配置文件,来实现动态刷新。

10:修改git上配置文件

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
spring:
  application:
    name: client
  rabbitmq:
    host: 192.168.99.100
    username: user
    password: password
env: 
  test1111复制代码

11:打开postman 访问config服务

http://localhost:8084/actuator/bus-refresh

SpringCloud实战五:统一配置中心

12:浏览器输入

http://localhost:8081/printEnv

SpringCloud实战五:统一配置中心

我们发现在没有重新启动config服务和client服务的情况下,我们实现了动态刷新client服务配置文件的功能

13:git仓库设置WebHooks

在上面,每次git仓库修改过后我们都要访问一下config刷新配置文件的接口,这显然是不合理的。那么我们可以通过在git上的配置,让每次提交代码时都自动访问我们的接口来实现修改后自动刷新。

选择仓库,点击管理,选择WebHooks,点击添加

SpringCloud实战五:统一配置中心

注意,这里的url为外网访问地址,大家可以部署服务器之后再来添加,

SpringCloud实战五:统一配置中心

五:结尾

感谢大家支持,系列文章接下来陆续更新,感谢大家。

对于springBoot还不了解的朋友可以看我的SpringBoot系列教程


以上所述就是小编给大家介绍的《SpringCloud实战五:统一配置中心》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

个体与交互

个体与交互

Ken Howard、Barry Rogers / 贾永娜、张凯峰 / 机械工业出版社华章公司 / 2012-3-20 / 45.00元

对敏捷软件开发的关注重点,通常都集中在“机制”方面,即过程和工具。“敏捷宣言”认为,个体与交互的价值要高于过程和工具,但这一点很容易被遗忘。在敏捷开发中,如果你重新将注意力放在人的方面,将会收获巨大利益。 本书展示了如何解决敏捷团队在实际项目中遭遇的问题。同时,本书也是很有实用价值的敏捷用户指南,其中包含的故事、最佳实践方法、经验以及技巧均可应用到实际项目当中。通过逐步实践,你将学会如何让团......一起来看看 《个体与交互》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具