Spring Cloud Config服务端配置细节(一)

上篇文章我们看了Spring Cloud中分布式配置中心的一个基本使用,这里边还涉及到许多细节,本文我们就来看看服务端配置中的一些细节。


本文是Spring Cloud系列的第二十三篇文章,了解前二十二篇文章内容有助于更好的理解本文:

1.使用Spring Cloud搭建服务注册中心
2.使用Spring Cloud搭建高可用服务注册中心
3.Spring Cloud中服务的发现与消费
4.Eureka中的核心概念
5.什么是客户端负载均衡
6.Spring RestTemplate中几种常见的请求方式
7.RestTemplate的逆袭之路,从发送请求到负载均衡
8.Spring Cloud中负载均衡器概览
9.Spring Cloud中的负载均衡策略
10.Spring Cloud中的断路器Hystrix
11.Spring Cloud自定义Hystrix请求命令
12.Spring Cloud中Hystrix的服务降级与异常处理
13.Spring Cloud中Hystrix的请求缓存
14.Spring Cloud中Hystrix的请求合并
15.Spring Cloud中Hystrix仪表盘与Turbine集群监控
16.Spring Cloud中声明式服务调用Feign
17.Spring Cloud中Feign的继承特性
18.Spring Cloud中Feign配置详解
19.Spring Cloud中的API网关服务Zuul
20.Spring Cloud Zuul中路由配置细节
21.Spring Cloud Zuul中异常处理细节
22.分布式配置中心Spring Cloud Config初窥


我们先通过下面一张图来看看Config Server的一个大致工作过程:

图片描述

结合这张图,我来说如下五点:

1.首先我们需要一个远程的Git仓库,自己学习可以直接用GitHub,在在实际生产环境中,需要自己搭建一个Git服务器,远程Git仓库的作用主要是用来保存我们的配置文件
2.除了远程Git仓库之外,我们还需要一个本地Git仓库,每当Config Server访问远程Git仓库时,都会保存一份到本地,这样当远程仓库无法连接时,就直接使用本地存储的配置信息
3.至于微服务A、微服务B则是我们具体的应用,这些应用在启动的时候会从Config Server中来加载相应的配置信息
4.当微服务A/B尝试去从Config Server中加载配置信息的时候,Config Server会先通过git clone命令克隆一份配置文件保存到本地
5.由于配置文件是存储在Git仓库中,所以配置文件天然的具备版本管理功能,Git中的Hook功能可以实时监控配置文件的修改

Git URI中的占位符

灵活的使用URI占位符,可以有效的减少我们的工作量。考虑这样一个问题,我有ServerA、ServerB两个服务,两个服务对应的配置文件的存储地址分别位于https://github.com/lenve/scCo...和https://github.com/lenve/scCo...,但是我的Config Server只有一个,那么当我的ServerA和ServerB连接上Config Server时,Config Server怎么知道去哪个地址下拿配置文件?这个时候就涉及到占位符的使用。
在上篇文章中我们已经了解了Spring Cloud Config中的三种占位符,分别是{application}、{profile}和{label},这些占位符除了用来标识配置文件的规则,还可以用在Config Server中对Git仓库的URI配置,用在URI配置中时,这三个占位符的含义分别如下所示:

1.{application}映射到客户端的 spring.application.name
2.{profile}映射到客户端上的 spring.profiles.active
3.{label}这是一个服务器端功能,标记"版本"的配置文件集

此时,假设我不同环境下的配置文件分别放在下面这些目录下:

https://github.com/lenve/scCo...
https://github.com/lenve/scCo...
https://github.com/lenve/scCo...

那么我的客户端文件这样配置:

spring.application.name=app
# dev根据具体情况来修改
spring.cloud.config.profile=dev
spring.cloud.config.label=master
spring.cloud.config.uri=http://localhost:2007/
server.port=2008

然后Config Server按下面这种方式配置即可:

spring.cloud.config.server.git.uri=https://github.com/lenve/scConfig.git
spring.cloud.config.server.git.search-paths={application}/{profile}

当然这种存储规划不一定最佳,这里只是给小伙伴们演示占位符的用法。

默认情况下,Config Server 克隆下来的文件保存在C:Users<当前用户>AppDataLocalTemp目录下,我们可以通过如下配置来修改:

spring.cloud.config.server.git.basedir=E:\\111\\

健康监测

默认情况下Spring Cloud Config会为配置中心服务端创建一个健康监测器,该检测器默认情况下是访问的仓库文件是{application}为app的配置文件,如果仓库中不存在这个文件,健康显示器就会显示仓库无法连接,此时我们有两种解决方案:1.仓库中添加相应的配置文件;2.重新指定检测的配置,重新指定方式如下:

spring.cloud.config.server.health.repositories.check.name=app
spring.cloud.config.server.health.repositories.check.label=master
spring.cloud.config.server.health.repositories.check.profiles=dev

此时,系统回去访问http://localhost:2007/app/dev/master地址,如果能够访问到,则显示仓库已连接,如下:

图片描述

安全保护

开发环境中我们的配置中心肯定是不能随随便便被人访问的,我们可以加上适当的保护机制,由于微服务是构建在Spring Boot之上,所以整合Spring Security是最方便的方式。

首先添加依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>

然后在application.properties中配置用户名密码:

security.user.name=sang
security.user.password=123

最后在配置中心的客户端上配置用户名和密码即可,如下:

spring.cloud.config.username=sang
spring.cloud.config.password=123

OK,如此之后,其他人就不能随意的获取到我们的配置信息了。OK,本文就先说到这里,有问题欢迎留言讨论。

参考资料:

1.《Spring Cloud微服务实战》

更多JavaEE资料请关注公众号:

图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

POJ 1797 Heavy Transportation

传送门&#xff1a;http://poj.org/problem?id1797 不想吐槽了&#xff0c;弄了好久才AC 实现代码&#xff1a; #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <cstdio> #include <iostream> u…

java8中方法区的内存大小如何设置_从Java8升级到Java11

奇技 指南为什么选择Java11?容器环境支持&#xff0c;GC等领域的增强&#xff0c;仅通过切换到 Java 11 就有 16&#xff05; 的改进。进行了瘦身&#xff0c;更轻量级&#xff0c;安装包体积小。JDK11 是一个长期支持版。1Java11相对于Java8的一些新特性1.变量类型推断Var关…

TCP建立连接

TCP的连接建立过程被称为三次握手:第一次握手&#xff1a;客户A的TCP向服务器B发出连接请求报文段,其首部中的同步位SYN 1 ,并选择序号seq x,表明传送| 数据时的第一 个数据字节的序号是X。第二次握手:B的TCP收到连接请求报文段后,如果同意,则发回确认。ACK1,其确认号ackx1。同…

webgl 着色器_如何使用AI,AR和WebGL着色器来帮助视障人士

webgl 着色器by Dan Ruta通过Dan Ruta 如何使用AI&#xff0c;AR和WebGL着色器来帮助视障人士 (How you can use AI, AR, and WebGL shaders to assist the visually impaired) Today, about 4% of the world’s population is visually impaired. Tasks like simple navigati…

计算机语言乍么设置,电脑如何设置语言

设置语言栏其实语言栏是用来进行输入法的切换的。当你需要在Windows中进行文字输入的时候,就需要用语言栏了,因为Windows的默认输入语言是英文,在这种情况下,你用键盘在文本里输入的文字会是英文字母,所以作为中国人的我们要想在Windows里输入中文的话,就需要语言栏的帮助了。试…

hive 初认识

结构Hive 是建立在hadoop上的数据仓库架构,它提供了一系列的工具,可以进行数据提取转换加载(这个过程叫做ETL),这是一种可以存储,查询和分析存储在hadoop中的大规模数据的机制.Hive定义了简单的类SQL查询语句 成为hql,他允许数据SQL的用户查询数据.同时 这个语言也允许数据mapr…

git使用(2)

1.远程仓库 a SSHKEY 第1步&#xff1a;创建SSH Key。在用户主目录下&#xff0c;看看有没有.ssh目录&#xff0c;如果有&#xff0c;再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件&#xff0c;如果已经有了&#xff0c;可直接跳到下一步。如果没有&#xff0c;打开Shel…

邮件中的商务英语

一、常见缩写 CC carbon copy&#xff1a;抄送 FYI for your information&#xff1a;供你参考 EOD end of the day BTW By the way&#xff1a;顺便提一下 COB close of the business 这两个词都是指下班前。需要催促某人在下班前给到回复的时候可以用用它们。 eg: Ple…

vue 横向菜单滚动定位_使用vue组件+iscroll实现一个横向菜单,不能正确滑动

使用vue组件iscroll实现一个横向菜单&#xff0c;可是却不能滑动&#xff0c;给父元素ul写死一个宽度可以滑动。但是&#xff0c;我在computed里计算宽度&#xff0c;直接路由进去不能滑动&#xff0c;当我进入别的组件(切换路由)回来又可以滑动了示例地址&#xff1a;http://o…

leetcode1353. 最多可以参加的会议数目(贪心算法)

给你一个数组 events&#xff0c;其中 events[i] [startDayi, endDayi] &#xff0c;表示会议 i 开始于 startDayi &#xff0c;结束于 endDayi 。 你可以在满足 startDayi < d < endDayi 中的任意一天 d 参加会议 i 。注意&#xff0c;一天只能参加一个会议。 请你返…

计算机组成原理实验读r1,计算机组成原理实验一

计算机组成原理实验一 (5页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;8.90 积分计算机组成原理实验计算机组成原理实验第一章、TEC-5 计算机组成实验箱简介运算器运算器74181通用寄存器通用寄存器…

如何使用Kotlin构建具有在线状态的Android Messenger应用

by Neo Ighodaro由新Ighodaro When building a chat application, it is essential to have an online presence feature. It is essential because your users will like to know when their friends are online, and are more likely to respond to their messages in real …

Spark常见问题解决办法

以下是在学习和使用spark过程中遇到的一些问题&#xff0c;记录下来。 1、首先来说说spark任务运行完后查错最常用的一个命令&#xff0c;那就是把任务运行日志down下来。 程序存在错误&#xff0c;将日志down下来查看具体原因!down日志命令&#xff1a;yarn logs -application…

linux下安装php的swoole扩展模块(安装后php加载不出来?)

应开发同事要求&#xff0c;需要安装php的扩展模块swoole。 swoole是一种PHP高级Web开发框架&#xff0c;框架不是为了提升网站的性能&#xff0c;而是为了提升网站的开发效率&#xff0c;以最少的性能损耗&#xff0c;换取最大的开发效率。 假设服务器上php服务版本为php5.6.2…

autosar工具链_Autosar开发与手写代码开发的区别

Autosar开发流程1.BSW开发主要应用工具链&#xff08;Vector等工具&#xff0c;具体可以百度搜索Autosar配置工具&#xff09;来配置&#xff0c;复杂驱动的代码需要手写&#xff0c;但是也要符合Autosar的接口标准&#xff0c;主要包括&#xff0c;CAN通信配置、数字输入配置、…

山东计算机类好的民办大学,2021年山东所有民办大学名单及排名(教育部)

高考考上一个好的大学&#xff0c;是每位考生和家长的一个梦想,但是选择一个适合自己的大学也非常重要。本文高考助手网帮各位考生整理了关于山东本地区所有的民办大学名单、山东所有的民办大学分数线排名、山东民办大学文理科投档线等相关知识&#xff0c;各位考生在填报志愿的…

leetcode1536. 排布二进制网格的最少交换次数(贪心算法)

给你一个 n x n 的二进制网格 grid&#xff0c;每一次操作中&#xff0c;你可以选择网格的 相邻两行 进行交换。 一个符合要求的网格需要满足主对角线以上的格子全部都是 0 。 请你返回使网格满足要求的最少操作次数&#xff0c;如果无法使网格符合要求&#xff0c;请你返回 …

xml文档包含html代码_为什么文档很重要,以及为什么应将其包含在代码中

xml文档包含html代码There are a plethora of acronyms when it comes to software development. KISS, DRY, SOLID… and so on and so forth. But, when it comes to documenting or commenting your code, there is no simple catchphrase.关于软件开发&#xff0c;有很多首…

python 版本分布式锁

此文章&#xff0c;实现python 版本的分布式锁&#xff0c;java版本的可以使用curator很容易实现&#xff0c;python版本如下在做分布式系统开发的时候&#xff0c;分布式锁可以说是必需的一个组件。最近做了一些调研和尝试&#xff0c;经过对比&#xff0c;基于ZooKeeper的分布…

JavaScript数组(2)---遍历/迭代方法 8种

最近工作中经常涉及到数据的处理&#xff0c;数组尤其常见&#xff0c;经常需要对其进行遍历、转换操作&#xff0c;网上的文章零零散散&#xff0c;不得已自己又找出红宝书来翻出来看&#xff0c;顺便记一笔&#xff0c;便于以后查询。 数组常用的方法 ECMAScript5为数组定义了…