管理微服务配置

对于单体应用架构来说,会使用配置文件管理我们的配置,这就是之前项目中的application.properties或application.yml。如果需要在多环境下使用,传统的做法是复制这些文件命名为application-xxx.properties,并且在启动时配置spring.profiles.active={profile}来指定环境。

在微服务架构下我们可能会有很多的微服务,所以要求的不只是在各自微服务中进行配置,我们需要将所有的配置放在统一平台上进行操作,不同的环境进行不同的配置,运行期间动态调整参数等等。总之一句话,使用集中管理配置是很有必要的。

Spring Cloud Config

  • 官方地址
  • 为分布式系统外部配置提供了服务器端和客户端的支持,它包括config server端和 config client端两部分
  • Config server端是一个可以横向扩展、集中式的配置服务器,它用于集中管理应用程序各个环境下的配置,默认 使用Git存储配置内容
  • Config client 是config server的客户端,用于操作存储在server中的配置属性
  • 优势
    • 集中管理配置
    • 不同环境不同配置
    • 运行期间可以动态调整
    • 配置修改后可以自动更新

本章源码

源码

全部SpringCloud教程

架构图

引入spring cloud config步骤

可基于之前SpringCloudDemo项目改造,也可以创建为新的项目

一、在GitHub创建一个git仓库用来存放git配置

  • 创建仓库名字为spring-cloud-config-repo的私有仓库
  • 增加其他模块(后面config client会详细说,可先跳过)的配置文件,格式为
      {application}-{profile}.properties

    并将配置项粘贴到新建的文件中,如:创建zuul-dev.properties,并将原来的zuul模块中的application.properties全部配置粘贴进来

  • {application}-{profile}.properties,{application}表示微服务的名称,{label}表示Git对应的分支,默认为master,{profile}表示配置文件的profile

    访问时就 /{application}/{profile}[/{label}]或/{label}/{application}-{profile}.properties

二、 创建config server端

  • 创建maven项目,可在原项目中创建Module

  • 引入pom依赖

      <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
  • 创建启动类

      package cn.kxtop.blog.configserver;
    
      import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.config.server.EnableConfigServer;
    // 注入到Eureka中,使高可用
    @EnableDiscoveryClient
    @SpringBootApplication
    @EnableConfigServer
    public class ConfigServerApplication { public static void main(String[] args) {
    SpringApplication.run(ConfigServerApplication.class);
    } }
  • 配置配置文件application.properties

      server.port=9999
    # 配置git仓库的地址(修改为你自己的git仓库地址)
    spring.cloud.config.server.git.uri=https://github.com/qupengkun/spring-cloud-config-repo.git
    # git仓库账号
    spring.cloud.config.server.git.username=YOU_NAME
    # git仓库秘密
    spring.cloud.config.server.git.password=YOU_PASSWORD
    #eureka,确保Spring cloud config 高可用
    eureka.client.serviceUrl.defaultZone = http://localhost:8761/eureka/
  • 启动项目并访问测试

    http请求localhost:9999/zuul/dev

三、创建config client端

  • 引入依赖
      <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-client</artifactId>
    </dependency>
  • 创建bootstrap.properties
      #对应之前git仓库的文件名,如zuul-dev.properties
    spring.application.name=zuul
    #config server 地址
    spring.cloud.config.uri=http://localhost:9999
    #{profile}名(环境)
    spring.cloud.config.profile=dev
    #{label}名,git仓库分支
    spring.cloud.config.label=master
  • 删除原来的application.properties,如没有,则不用操作直接下一步
  • 启动client端可见连接到了config-server端

  • 查看eureka发现已经注册到eureka中

  • 测试在线参数修改

    可在Controller上加注解 @RefreshScope 请求server:port/refresh手动刷新

总结及后续

以上基本演示了Spring Cloud Config的用法,还是比较简单的,我们引入了Eureka使Config Server能保证高可用,还可以增加@RefreshScope手动刷新配置文件,如果配置对安全要求较高,也可以引入JCE(Java Cryptography Extension)进行加解密操作。

其实每次都去手动刷新配置还是比较麻烦且有很大的局限性的,那么如何修改配置后自动感知并刷新呢?请关注下一章基于Spring Cloud Bus实现自动刷新配置。

持续学习,记录点滴。更多文章请访问 文章首发

微服务实战——高可用的SpringCloudConfig的更多相关文章

  1. 微服务实战(二):使用API Gateway

    微服务实战(一):微服务架构的优势与不足 微服务实战(二):使用API Gateway 微服务实战(三):深入微服务架构的进程间通信 微服务实战(四):服务发现的可行方案以及实践案例 微服务实践(五) ...

  2. Spring Cloud微服务实战阅读笔记(一) 基础知识

    本文系<Spring Cloud微服务实战>作者:翟永超,一书的阅读笔记. 一:基础知识   1:什么是微服务架构     是一种架构设计风格,主旨是将一个原本独立的系统拆分成多个小型服务 ...

  3. 微服务实战(四):服务发现的可行方案以及实践案例 - DockOne.io

    原文:微服务实战(四):服务发现的可行方案以及实践案例 - DockOne.io 这是关于使用微服务架构创建应用系列的第四篇文章.第一篇介绍了微服务架构的模式,讨论了使用微服务架构的优缺点.第二和第三 ...

  4. 微服务实战(三):深入微服务架构的进程间通信 - DockOne.io

    原文:微服务实战(三):深入微服务架构的进程间通信 - DockOne.io [编者的话]这是采用微服务架构创建自己应用系列第三篇文章.第一篇介绍了微服务架构模式,和单体式模式进行了比较,并且讨论了使 ...

  5. 微服务实战(二):使用API Gateway - DockOne.io

    原文:微服务实战(二):使用API Gateway - DockOne.io [编者的话]本系列的第一篇介绍了微服务架构模式.它讨论了采用微服务的优点和缺点,除了一些复杂的微服务,这种模式还是复杂应用 ...

  6. 微服务实战(一):微服务架构的优势与不足 - DockOne.io

    原文:微服务实战(一):微服务架构的优势与不足 - DockOne.io [编者的话]本文来自Nginx官方博客,是微服务系列文章的第一篇,主要探讨了传统的单体式应用的不足,以及微服务架构的优势与挑战 ...

  7. SpringCloud学习(SPRINGCLOUD微服务实战)一

    SpringCloud学习(SPRINGCLOUD微服务实战) springboot入门 1.配置文件 1.1可以自定义参数并在程序中使用 注解@component @value 例如 若配置文件为a ...

  8. .Net微服务实战之负载均衡(上)

    系列文章 .Net微服务实战之技术选型篇 .Net微服务实战之技术架构分层篇 .Net微服务实战之DevOps篇 相关源码:https://github.com/SkyChenSky/Sikiro P ...

  9. .Net微服务实战之必须得面对的分布式问题

    系列文章 .Net微服务实战之技术选型篇 .Net微服务实战之技术架构分层篇 .Net微服务实战之DevOps篇 .Net微服务实战之负载均衡(上) .Net微服务实战之CI/CD .Net微服务实战 ...

随机推荐

  1. React Native Build Apk

    1 React Native安卓项目打包APK 1.1 产生签名的key 先通过keytool生成key 1 keytool -genkey -v -keystore demo-release-key ...

  2. 一起了解 .Net Foundation 项目 No.9

    .Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. DLR/IronPytho ...

  3. 一文看懂js中元素偏移量(offsetLeft,offsetTop,offsetWidth,offsetHeight)

    偏移量(offset dimension) 偏移量:包括元素在屏幕上占用的所有可见空间,元素的可见大小有其高度,宽度决定,包括所有内边距,滚动条和边框大小(注意,不包括外边距). 以下4个属性可以获取 ...

  4. 关于在layui中的table checkbox 默认选中设置

    一.layui版本 layui-v2.4.5 二.设置table的checkbox默认选中 总共有两种方法: 方法1:在返回的json中设置LAY_CHECKED为true,页面上的checkbox就 ...

  5. GitOps入门与实践:如何集成Git和K8S?

    也许你之前听说过GitOps,但是对其并不了解.在本文中,我将对其进行简单介绍,它其实是一个应用程序开发和管理中的一个术语,其核心思想是将应用系统的声明性基础架构和应用程序存放在Git的版本控制库中. ...

  6. 无损卡尔曼滤波UKF(3)-预测-生成Sigma点

    无损卡尔曼滤波UKF(3)-预测-生成Sigma点 1 选择创建Sigma点 A 根据 已知上一个时间戳迭代出来的 后验状态 x_{k|k} 和后验协方差矩阵 P_{k|k} 他们代表当前状态的分布. ...

  7. zabbix基本概述

    #zabbix简介 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案 #官网地址 #官方网站 http://www.zabbix.com #zabbix4.2 ...

  8. Redis01——Redis究竟支持哪些数据结构

    Redis已经越来越多地应用到互联网技术中,而关于Redis的相关问题,也成为面试中必不可少的一部分,本文开始将会逐渐把我了解到的关于Redis的一些面试问题整理出来,供各位参考,如有不对之处,烦请指 ...

  9. js 模拟滚动条

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 深度学习与人类语言处理-语音识别(part2)

    上节回顾深度学习与人类语言处理-语音识别(part1),这节课我们将学习如何将seq2seq模型用在语音识别 LAS 那我们来看看LAS的Encoder,Attend,Decoder分别是什么 Lis ...