Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 365|回复: 0

[默认分类] spring cloud 入门系列七:基于Git存储的分布式配置中心--Spring Cloud Config

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-5-17 10:50:09 | 显示全部楼层 |阅读模式
    我们前面接触到的Spring Cloud组件都是基于Netflix的组件进行实现的,这次我们来看下spring cloud 团队自己创建的一个全新项目:Spring Cloud Config.
    它用来为分布式系统中的基础设施和微服务提供集中化的外部配置支持,分为服务端和客户端两个部分。
    其中服务端也称为分布式配置中心,他是独立的微服务应用,用来连接配置仓库并为客户端提供获取接口(这些接口返回配置信息、加密、解密信息等);
    客户端是微服务架构中的各个微服务应用或基础设施,它们通过制定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。
    由于配置中心默认采用Git来存储配置信息,因此我们会用到Git相关的内容,如果没有用过Git或者忘记怎么用了,可以参考下廖雪峰老师的Git教程
    另外,我自己用的Git远程仓库是码云。
    ====================华丽的分割线===================
    接下来看下代码怎么实现。
    一、准备远程Git仓库

    在Gitee上新建一个项目https://gitee.com/sam-uncle/spring-cloud-learning
    在项目下新建子目录spring-cloud-config-file,然后新建三个文件
      
           
      内容分别是from=git-dev-1.0、from=git-test-1.0、from=git-1.0
      
    新建一个分支config-lable-test,新分支里面新建三个同名的文件,不过内容分别是from=git-dev-2.0、from=git-test-2.0、from=git-2.0

      
    二、构建配置中心
      先给出最终代码结构:
      
      搭建过程如下:

    新建maven工程config-server
    修改POM文件
       
      
    1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    2.   <modelVersion>4.0.0</modelVersion>
    3.   <groupId>com.sam</groupId>
    4.   <artifactId>config-server</artifactId>
    5.   <version>0.0.1-SNAPSHOT</version>
    6.   
    7.   <parent>
    8.         <groupId>org.springframework.boot</groupId>
    9.         <artifactId>spring-boot-starter-parent</artifactId>
    10.         <version>1.5.1.RELEASE</version>
    11.     </parent>
    12.     <properties>
    13.         <javaVersion>1.8</javaVersion>
    14.     </properties>
    15.     <!-- 使用dependencyManagement进行版本管理 -->
    16.     <dependencyManagement>
    17.         <dependencies>
    18.             <dependency>
    19.                 <groupId>org.springframework.cloud</groupId>
    20.                 <artifactId>spring-cloud-dependencies</artifactId>
    21.                 <version>Camden.SR6</version>
    22.                 <type>pom</type>
    23.                 <scope>import</scope>
    24.             </dependency>
    25.         </dependencies>
    26.     </dependencyManagement>
    27.     <dependencies>
    28.        <!-- 引入config server依赖 -->
    29.         <dependency>
    30.             <groupId>org.springframework.cloud</groupId>
    31.             <artifactId>spring-cloud-config-server</artifactId>
    32.         </dependency>
    33.     </dependencies>
    34.    
    35. </project>
    复制代码

       
    创建启动类
       
      
    1. /**
    2. * @EnableConfigServer
    3. *
    4. * 开启Spring Cloud Config 的服务端功能
    5. *
    6. */
    7. @SpringBootApplication
    8. @EnableConfigServer
    9. public class ConfigServerApp {
    10.     public static void main(String[] args) {
    11.         SpringApplication.run(ConfigServerApp.class, args);
    12.     }
    13. }
    复制代码

       
    配置application.properties文件,指定远程仓库信息
       
      
    1. server.port=7001
    2. spring.application.name=config-server
    3. #配置Git仓库的地址
    4. spring.cloud.config.server.git.uri=https://gitee.com/sam-uncle/spring-cloud-learning/
    5. #配置仓库路径下的相对搜索位置,可以配置多个
    6. spring.cloud.config.server.git.search-paths=spring-cloud-config-file
    7. #这里配置你的Git仓库的用户名
    8. spring.cloud.config.server.git.username=[i]用户名[/i]
    9. #这里配置你的Git仓库的密码
    10. spring.cloud.config.server.git.password=[i]密码[/i]
    复制代码

       
    启动并验证

        访问配置信息的URL与配置文件的映射关系如下:

      
      
       /{application}/{profile} [/{label}]
       /{application}-{profile}.yml
       /{label}/{application}-{profile}.yml
       /{application}-{profile}.properties
       /{label}/{appliction}-{profile}.properties
       

        上面的url会映射{application}-{profile}.properties对应的配置文件,其中{label}对应Git上不同的分支,默认是master。
        通过浏览器访问http://localhost:7001/sam/dev/config-label-test,结果如下:
        

    三、实现客户端
       最终代码结构:
      
      
      搭建过程如下:

    新建maven工程config-client
    修改POM文件
       
      
    1. <project xmlns="http://maven.apache.org/POM/4.0.0"
    2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4.     <modelVersion>4.0.0</modelVersion>
    5.     <groupId>com.sam</groupId>
    6.     <artifactId>config-client</artifactId>
    7.     <version>0.0.1-SNAPSHOT</version>
    8.     <parent>
    9.         <groupId>org.springframework.boot</groupId>
    10.         <artifactId>spring-boot-starter-parent</artifactId>
    11.         <version>1.5.1.RELEASE</version>
    12.     </parent>
    13.     <properties>
    14.         <javaVersion>1.8</javaVersion>
    15.     </properties>
    16.     <!-- 使用dependencyManagement进行版本管理 -->
    17.     <dependencyManagement>
    18.         <dependencies>
    19.             <dependency>
    20.                 <groupId>org.springframework.cloud</groupId>
    21.                 <artifactId>spring-cloud-dependencies</artifactId>
    22.                 <version>Camden.SR6</version>
    23.                 <type>pom</type>
    24.                 <scope>import</scope>
    25.             </dependency>
    26.         </dependencies>
    27.     </dependencyManagement>
    28.     <dependencies>
    29.         <!-- 引入config依赖 -->
    30.         <dependency>
    31.             <groupId>org.springframework.cloud</groupId>
    32.             <artifactId>spring-cloud-starter-config</artifactId>
    33.         </dependency>
    34.         <dependency>
    35.             <groupId>org.springframework.boot</groupId>
    36.             <artifactId>spring-boot-starter-web</artifactId>
    37.         </dependency>
    38.     </dependencies>
    39. </project>
    复制代码

       
    创建启动类
       
      
    1. @SpringBootApplication
    2. public class ConfigClientApp {
    3.     public static void main(String[] args) {
    4.         SpringApplication.run(ConfigClientApp.class, args);
    5.     }
    6. }
    复制代码

       
    配置bootstrap.properties文件,指定config-server位置
       
      
    1. server.port=7002
    2. #{application}
    3. spring.application.name=sam
    4. #{profile}
    5. spring.cloud.config.profile=dev
    6. #{label}
    7. spring.cloud.config.label=master
    8. #config server uri
    9. spring.cloud.config.uri=http://localhost:7001/
    复制代码

       
    创建controller
       
      
    1. @RefreshScope
    2. @RestController
    3. public class TestController {
    4.    
    5.     /**
    6.      * 通过@Value 来讲配置文件中的值写入到代码中
    7.      */
    8.     @Value("${from}")
    9.     private String from;
    10.     @RequestMapping("/from")
    11.     public String from() {
    12.         return from;
    13.     }
    14. }
    复制代码

       
    启动并测试

        
      
    四、工作原理
    Spring Cloud Config配置中心的工作原理如下:

    客户端启动时,根据bootstrap.properties中配置的应用名{application}、环境名{profile}、分支名{label},向Config Server请求获取配置信息。
    Config Server根据自己维护的Git仓库信息和客户传递过来的配置定位信息去查找配置信息。
    通过git clone命令将找到的配置信息下载到本地(Config Server的文件系统中)。在通过页面访问或启动客户端的时候,我们在服务端能看到如下下载的log:
       
      
    1. 2018-05-14 22:51:58.055  INFO 3084 --- [nio-7001-exec-1] o.s.c.c.s.e.NativeEnvironmentRepository  : Adding property source: file:/C:/Users/sam/AppData/Local/Temp/config-repo-8627749771720918793/spring-cloud-config-file/sam-dev.properties
    2. 2018-05-14 22:51:58.055  INFO 3084 --- [nio-7001-exec-1] o.s.c.c.s.e.NativeEnvironmentRepository  : Adding property source: file:/C:/Users/sam/AppData/Local/Temp/config-repo-8627749771720918793/spring-cloud-config-file/sam.properties
    复制代码

       
    Config Server创建Spring 的ApplicationContext实例,并从Git本地仓库中加载配置文件,最后将这些配置内容读取出来返回给客户端。
    客户端在获取外部配置信息后加载到客户端的applicationContext实例。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-20 21:25 , Processed in 0.386071 second(s), 52 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表