SpringCloud-狂神(10. 分布式配置)学习笔记

上一篇 :9. Zuul-网关路由

1. 概述

1.1. 分布式面临的配置文件的问题

微服务意味着将单体应用拆分成一个个自服务,这些服务都是要相应的配置信息才能运行,随着系统内微服务数量越来越多,配置信息也不断地增多,所以一套集中式的、动态的配置管理设施是必不可少的。

1.2. 什么是 SpringCloud Config分布式配置中心

在这里插入图片描述
服务 A、B 分别需要一些配置文件,就从Git 云端上去读取,然后再通过负载均衡策略进行分配。

SpringCloud Config是一个提供外部集中式配置管理的设施,配置服务器为各种不同的额微服务应用提供了一个中心化的外部配置

SpringCloud Config分为客户端和服务端两部分

  • 服务端:分布式配置中心,是一个独立的微服务,用来连接并为客户端提供配置信息,加密/解密信息等访问接口
  • 客户端:通过指定的配置中心获取配置资源,cloud推荐用git来存储配置信息,就是一个个服务

1.3. SpringCloud Config作用

  1. 集中管理配置文件
  2. 不同环境不同配置,动态化的配置更新
  3. 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,让服务中心统一为服务拉取配置文件
  4. 当配置发生变动时,服务不需要重启即可感知配置变化并应用
  5. 将配置信息以REST接口形式暴露

2. Git环境搭建

  1. Git 下载

    Git 镜像的下载地址 :https://npm.taobao.org/mirrors/git-for-windows/

    可视化工具 tortoisegit 的下载地址 :https://tortoisegit.org/download/(这个可以不装)

  2. Git 安装

    下载完安装包后,在没有其他特殊需求的情况下,一直下一步即可

    如有其他需求,则自行百度,这里就不多说了

    安装完成后,在桌面右击鼠标就能看到 Git

在这里插入图片描述

  1. 注册/登录Git

    使用 码云 或 Github 都可

    这里使用的是 码云

  2. 新建仓库
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. 把仓库克隆到本地
    在这里插入图片描述

  • 如果下载了可视化工具

    在你需要存放该仓库的文件夹下,右击鼠标

    在这里插入图片描述
    在这里插入图片描述
    最后得到的仓库
    (有个绿色的勾)
    在这里插入图片描述

  1. 编写配置文件

    因为简单测试
    新建一个 application.yml,并编写

    spring:
      profiles:
        active: dev
    
    ---
    
    spring:
      profiles: dev
      application:
        name: springcloud-config-dev
    
    ---
    
    spring:
      profiles: test
      application:
        name: springcloud-config-test
    
  2. 把刚刚修改的内容提交到本地仓库

    右击 spring-cloud-config 文件夹
    在这里插入图片描述
    在这里插入图片描述

  3. 把本地仓库的内容提交到码云上

    右击 spring-cloud-config 文件夹

    在这里插入图片描述
    去码云上查看

    在这里插入图片描述

3. 服务端连接 Git 配置

  1. 新建一个模块作为服务端 :springcloud-config-server-3010

  2. 编写 POM 文件

    <?xml version="1.0" encoding="UTF-8"?>
    <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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.demo</groupId>
    <version>0.0.1-SNAPSHOT</version>
    <parent>
    	<artifactId>Demo_SpringCloud</artifactId>
    	<groupId>org.demo</groupId>
    	<version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>springcloud-config-3010</artifactId>
    <properties>
    	<java.version>1.8</java.version>
    </properties>
    <dependencies>
    	<!--web 服务-->
    	<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-web</artifactId>
    	</dependency>
    	<!--config-server-->
    	<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-config-server -->
    	<dependency>
    		<groupId>org.springframework.cloud</groupId>
    		<artifactId>spring-cloud-config-server</artifactId>
    		<version>2.2.0.RELEASE</version>
    	</dependency>
    </dependencies>
    <build>
    	<plugins>
    		<plugin>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-maven-plugin</artifactId>
    		</plugin>
    	</plugins>
    </build>
    </project>
    
  3. 编写 application.yml

    server:
      port: 3010
    
    spring:
      application:
        name: springcloud-config-server
      # 连接远程仓库
      cloud:
        config:
          server:
            git:
              # https 地址
              uri: https://gitee.com/yuan934672344/spring-cloud-config.git
    
    

    注意:
    1、这里是 uri 不是 url
    2、这个地址是复制 HTTPS 的,不是 SSH 的
    在这里插入图片描述

  4. 在主启动类上添加config-server的注解

    @SpringBootApplication
    // 开启 config-server
    @EnableConfigServer
    public class SpringcloudConfig3010Application {
    	public static void main(String[] args) {
    		SpringApplication.run(SpringcloudConfig3010Application.class, args);
    	}
    }
    
  5. 启动项目

    访问 http://localhost:3010/application-dev.yml
    (自己的端口号 + 文件名)

    在这里插入图片描述
    得到了文件中的信息

    在官网上看到,还可以以这些形式访问资源

    在这里插入图片描述

4. 客户端连接服务端远程访问

  1. 在 spring-cloud-config 文件夹中添加一个 yml :config-client.yml

    spring:
      profiles:
        active: dev
    ---
    spring:
      profiles: dev
      application:
        name: springcloud-config-client-dev
    server:
      port: 8201
    # Eureka 配置
    eureka:
      client:
        service-url:
          defaultZone : http://127.0.0.1:7001/eureka/
    ---
    spring:
      profiles: test
      application:
        name: springcloud-config-client-test
    
    server:
      port: 8202
    eureka:
      client:
        service-url:
          defaultZone : http://127.0.0.1:7001/eureka/
    

    和之前一样的提交到码云仓库

  2. 新建一个模块 :springcloud-config-client

  3. 编写 POM 文件

    <?xml version="1.0" encoding="UTF-8"?>
    <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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.demo</groupId>
    <version>0.0.1-SNAPSHOT</version>
    <parent>
    	<artifactId>Demo_SpringCloud</artifactId>
    	<groupId>org.demo</groupId>
    	<version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>springcloud-config-client</artifactId>
    <properties>
    	<java.version>1.8</java.version>
    </properties>
    <dependencies>
    	<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-actuator</artifactId>
    	</dependency>
    	<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-web</artifactId>
    	</dependency>
    	<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-config -->
    	<dependency>
    		<groupId>org.springframework.cloud</groupId>
    		<artifactId>spring-cloud-starter-config</artifactId>
    		<version>2.2.0.RELEASE</version>
    	</dependency>
    </dependencies>
    <build>
    	<plugins>
    		<plugin>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-maven-plugin</artifactId>
    		</plugin>
    	</plugins>
    </build>
    </project>
    
  4. 编写 application.yml

    spring:
      application:
        name: springcloud-config-client
    
  5. 编写 bootstrap.yml

    # application.yml 是用户级别的配置
    # bootstrap.yml 是系统级别的配置
    spring:
      cloud:
        config:
          # 而客户端连接服务端
          uri: http://localhost:3010
          # 需要从 Git 上获取的资源名,不需要后缀
          name: config-client
          # 访问上述资源的哪个一个环境的内容
          profile: dev
          # 从 Git 上哪一个分支去获取
          label: master
    
  6. 编写控制器 :ConfigClientController

    @RestController
    public class ConfigClientController {
        // 需要从远程仓库获取的信息
    
        @Value("${spring.application.name}")
        private String applicationName;
    
        @Value("${eureka.client.service-url.defaultZone}")
        private String eurekaServer;
    
        @Value("${server.port}")
        private String port;
    
        @RequestMapping("/config")
        public String getConfiguration(){
            return "applicationName : "+ applicationName +
                   "eurekaServer : "+ eurekaServer +
                   "port : "+ port ;
        }
    }
    
  7. 启动 服务端 和 客户端 测试

    因为在 客户端 的配置文件中,选择的是 dev 环境的配置信息,
    又因为在 服务端 的配置文件中,配置了 dev 环境中的端口号是 8201
    所以访问 :http://localhost:8201/config
    在这里插入图片描述

5. 将 springcloud-config 与之前的项目整合

  1. 在 spring-cloud-config 文件中编写两个文件,并提交

    config-eureka.yml

    spring:
      profiles:
        active: dev
    ---
    server:
      port: 7001
    spring:
      profiles: dev
      application:
        name: springcloud-config-eureke-7001
    eureka:
      instance:
        hostname: localhost
        prefer-ip-address: true
        ip-address: 127.0.0.1
      client:
        register-with-eureka: false
        fetch-registry: false
        service-url:
          defaultZone : http://127.0.0.2:7002/eureka/
    
    ---
    server:
      port: 7002
    spring:
      profiles: test
      application:
        name: springcloud-config-eureke-7002
    eureka:
      instance:
        hostname: localhost
        prefer-ip-address: true
        ip-address: 127.0.0.2
      client:
        register-with-eureka: false
        fetch-registry: false
        service-url:
          defaultZone : http://127.0.0.1:7001/eureka/
    

    config-provider.yml

    spring:
      profiles:
        active: dev
    ---
    server:
      port: 8081
    
    mybatis:
      type-aliases-package: com.demo.pojo
      mapper-locations: classpath:mybatis/mapper/*.xml
      config-location: classpath:mybatis/mybatis-config.xml
    
    spring:
      profiles: dev
      application:
        #多个提供者的服务名必须一致
        name: springcloud-config-provider
      datasource:
        username: root
        password: 123456
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/spring_cloud_01?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
        type: com.alibaba.druid.pool.DruidDataSource
    
    logging:
      level:
        com.demo.mapper: DEBUG
    
    # Eureka,配置服务注册到哪里
    eureka:
      client:
        service-url:
          # 配置监控页面的地址,这是在 Eureka Server 中配置的
          defaultZone: http://127.0.0.1:7001/eureka/,http://127.0.0.2:7002/eureka/
      instance:
        # 修改 Eureka 监控页面上的默认描述信息
        instance-id: springcloud-config-provider-8081
    
    ribbon:
      eureka:
        enabled: true
    
    # 配置监控信息
    info:
      app.name: hehe-SpringCloud
      company.name: www.XXXX.com
    
    ---
    server:
      port: 8083
    
    mybatis:
      type-aliases-package: com.demo.pojo
      mapper-locations: classpath:mybatis/mapper/*.xml
      config-location: classpath:mybatis/mybatis-config.xml
    
    spring:
      profiles: test
      application:
        #多个提供者的服务名必须一致
        name: springcloud-config-provider
      datasource:
        username: root
        password: 123456
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/spring_cloud_02?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
        type: com.alibaba.druid.pool.DruidDataSource
    
    logging:
      level:
        com.demo.mapper: DEBUG
    
    # Eureka,配置服务注册到哪里
    eureka:
      client:
        service-url:
          # 配置监控页面的地址,这是在 Eureka Server 中配置的
          defaultZone: http://127.0.0.1:7001/eureka/,http://127.0.0.2:7002/eureka/
      instance:
        # 修改 Eureka 监控页面上的默认描述信息
        instance-id: springcloud-config-provider-8083
    
    ribbon:
      eureka:
        enabled: true
    
    # 配置监控信息
    info:
      app.name: hehe-SpringCloud
      company.name: www.XXXX.com
    
  2. 新建一个模块 :springcloud-config-eureka

  3. POM 文件

    <?xml version="1.0" encoding="UTF-8"?>
    <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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>com.demo</groupId>
    	<version>0.0.1-SNAPSHOT</version>
    	<parent>
    		<artifactId>Demo_SpringCloud</artifactId>
    		<groupId>org.demo</groupId>
    		<version>1.0-SNAPSHOT</version>
    	</parent>
    	
    	<artifactId>springcloud-config-eureka</artifactId>
    	<properties>
    		<java.version>1.8</java.version>
    	</properties>
    	
    	<dependencies>
    	<!--eureka-server-->
    		<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server -->
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-eureka-server</artifactId>
    			<version>1.4.7.RELEASE</version>
    		</dependency>
    	<!--热部署-->
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-devtools</artifactId>
    		</dependency>
    		
    	<!--config 远程配置 -->
    		<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-config -->
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-config</artifactId>
    			<version>2.2.0.RELEASE</version>
    		</dependency>
    	</dependencies>
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    
    </project>
    
    
  4. 编写 bootstrap.yml

    #======= 远程配置 =================
    spring:
      cloud:
        config:
          # 而客户端连接服务端
          uri: http://localhost:3010
          # 需要从 Git 上获取的资源名,不需要后缀
          name: config-eureka
          # 访问上述资源的哪个一个环境的内容
          profile: test
          # 从 Git 上哪一个分支去获取
          label: master
    
  5. 编写 application.yml

    spring:
      application:
        name: spring-cloud-config-eureka
    
  6. 启动项目,访问,测试

    其他的服务都是一样的步骤

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuan_404

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值