热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

第九章SpringCloudConfig

9-1.SpringCloudConfig是什么?​ 在分布式的系统中,尤其是当我们的分布式项目越来越多,每个项目都有自己的配置文件&#

9-1. Spring Cloud Config是什么?

​   在分布式的系统中,尤其是当我们的分布式项目越来越多,每个项目都有自己的配置文件,对配置文件的统一管理就成立一种需要,而Spring Cloud Config就提供了对各个分布式项目配置文件的统一管理支持。Spring Cloud Config也叫分布式配置中心,市面上开源的分布式配置中心有很多,比如国内的,360的QConf、淘宝的diamond、百度的disconf都是解决分布式系统配置管理问题,国外也有很多开源的配置中心,Apache的Apache Commons Configuration 、 owner、cfg4j等等。

​   Spring Cloud Config是一个解决分布式系统的配置管理方案。它包含Client和Server两个部分,Server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,Client通过接口获取数据、并依据数据初始化自己的应用。Spring Cloud使用git或svn存放配置文件,默认情况下使用git.


9-2.构建Spring Cloud Config配置中心


  1. 创建一个Spring boot项目

  2. 在pom.xml文件中添加依赖

    <dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-config-serverartifactId>
    dependency>

  3. 在入口类的方法上添加注解&#64;EnableConfigServer

  4. 在application.properties中配置一下git仓库信息&#xff0c;此处我们使用GitHub(也可以使用码云 gitee),首先在我的GitHub上创建一个名为spring-cloud-config的项目&#xff0c;创建之后&#xff0c;再做以下配置&#xff1a;

    server.port&#61;3721
    spring.application.name&#61;springcloud-config-serverspring.cloud.config.server.git.uri&#61;http://github.com/项目名/spring-cloud-config.git
    spring.cloud.config.server.git.search-paths&#61;config-center
    spring.cloud.config.server.git.username&#61;xxx&#64;163.com
    spring.cloud.config.server.git.password&#61;xxxxxx

    1. uri:表示配置中心所在仓库的位置
    2. search-paths:表示仓库下的子目录
    3. username&#xff1a;GitHub的用户名
    4. password&#xff1a;GitHub的密码

9-3. 构建Spring Cloud Config配置中心仓库

​   接下来我们需要在GitHub上设置好配置中心&#xff0c;首先在本地 创建一个文件夹叫config,然后在里面创建一个文件夹叫config-center&#xff0c;然后在config-center中创建四个配置文件&#xff1a;如下


  • application.properties
  • application-dev.properties // 生产环境下的配置文件
  • application-test.properties // 测试环境下的配置文件
  • application-online.properties // 上线环境下的配置文件

在四个文件中分别写上要测试的内容


  • url&#61;http://www.zjtd.com
  • url&#61;http://dev.zjtd.com
  • url&#61;http://test.zjtd.com
  • url&#61;http://online.zjtd.com

然后回到config目录下&#xff0c;一次执行如下命令将本地文件同步到GitHub的仓库中&#xff1a;

说明&#xff1a;在使用命令之前先从http://git-scm.com/网站下载安装git的Windows客户端


  1. 添加提交人的账号信息&#xff0c;git需要知道提交人的信息作为表示

    git config --global user.name &#39;xxx&#39;
    git config --global user.email &#39;xxx&#64;163.com&#39;

  2. 将该目录变为git可以管理的目录

    git init

  3. 将文件添加到暂存区

    git add config-center/

  4. 把文件提交到本地仓库

    git commit -m &#39;add config-center&#39;

  5. 添加到远程主机 origin为主机名称

    git remote add origin http://github.com/项目名/spring-cloud-congfig.git

  6. 将本地的master 分支推送到origin主机

    git push -u origin master

  至此&#xff0c;我们的配置文件就上传到GitHub上了。

  此时启动我们的配置中心&#xff0c;通过/{application}/{profile}/{label}就能访问到我们的配置文件了&#xff1b;


  • &#xff5b;application&#xff5d;表示配置文件的名字
  • &#xff5b;profile&#xff5d;表示环境有dev/test/online及默认
  • &#xff5b;label&#xff5d;表示分支&#xff0c;默认我们放在master分支上

  通过浏览器访问http://localhost:3721/application/dev/master返回的JSON格式的数据&#xff1a;

  name表示配置文件名application部分&#xff0c;

  profiles表示环境部分&#xff0c;

  label表示分支&#xff0c;

v  ersion表示GitHub上提交时产生的版本号&#xff0c;

  同时当我们访问成功后&#xff0c;在控制台会打印出相关的日志信息&#xff0c;

  当访问成功后配置中心会通过git clone 命令将远程的配置文件在本地也保存一份&#xff0c;以确保在git仓库故障时我们的应用还可以继续正常使用。


9-4.构建Spring Cloud Config配置中心客户端


  1. 创建一个springboot工程 名叫spring-cloud-config-client

  2. 添加相关依赖

    <dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-configartifactId>
    dependency>

  3. 创建bootstarp.properties文件&#xff0c;用于获取配置信息&#xff0c;文件内容如下&#xff08;注意配置信息一定要放在bootstarp.properties文件中才有效&#xff09;&#xff1a;

    server.port&#61;3722
    spring.application.name&#61;application
    spring.cloud.config.profile&#61;dev
    spring.cloud.config.label&#61;master
    spring.cloud.config.uri&#61;http://localhost:3721/

    • name 对应配置文件中的application部分
    • profile对应的是profile部分
    • label对应的是label部分、
    • uri表示配置中心的地址
  4. 创建一个Controller进行测试

    1. 第一种方式获取

    &#64;RestController
    public class ConfigController{&#64;Value("${url}")private String url;&#64;RequestMapping("/cloud/url")public String url(){return url;}
    }

    ​ 2.第二种方式获取

    &#64;RestController
    public class ConfigController{&#64;Autowiredprivate Environment env;&#64;RequestMapping("/cloud/url2")public String url2(){return env.getProperty("url");}
    }

  我们可以直接使用&#64;Value注解注入配置的属性值&#xff0c;也可以通过Environment对象来获取配置的属性值。


9-5. Spring Cloud配置中心的工作原理

Spring Cloud Config Server的工作过程如下图所示&#xff1a;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1hTkf6Dd-1613383280014)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20210215163006028.png)]


  1. 首先需要一个远程git仓库&#xff0c;平时测试可以使用GitHub &#xff0c;在实际生产环境中&#xff0c;需要搭建一个git 服务器&#xff0c;远程Git仓库的主要作用是保存我们的配置文件。
  2. 除了远程的Git仓库之外&#xff0c;我们还需要一个本地的Git仓库&#xff0c;每当Config Server访问远程Git仓库时&#xff0c;都会克隆一份到本地&#xff0c;这样当远程仓库无法连接时&#xff0c;就直接使用本地存储的配置信息。
  3. 微服务A和B则是我们具体的应用&#xff0c;这些应用在启动的时候会从config server 中获取相应的配置文件。
  4. 当微服务A和B尝试从config server中加载配置信息时&#xff0c;config server会先通过Git clone 命令克隆一份配置文件保存到本地。
  5. 由于配置文件是存储在Git仓库中&#xff0c;所以配置文件天然具有版本管理功能。

9-6.Spring Cloud 的安全保护

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


  1. 在spring cloud config server 项目中添加依赖

    <dependency><groupId>org.springframework.bootgroupId><artifactId>spring-cloud-starter-securityartifactId>
    dependency>

  2. 在spring cloud config server项目的application.properties中配置用户名和密码

    spring.security.user.name&#61;admin
    spring.security.user.password&#61;123456

  3. 在spring cloud config client项目的bootstrap.properties中配置用户名和密码

    spring.cloud.config.username&#61;admin
    spring.cloud.config.password&#61;123456

  4. 最后验证测试


推荐阅读
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
author-avatar
娜娜的乖宝宝699
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有