SpringCloud Config分布式配置

1.SpringCloud Config分布式配置

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

​ 比如现在有多个服务A、B、C三个服务,那么他就会有三个配置文件,那如果我们可以把这三个配置文件放在同一个配置中心中,这样效果就会比较的好,然后我们就从这个配置服务中心去找,这样的话就比较的方便;

​ SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务的应用的所有环节提供了一个中心化的外部配置。

​ Spring Cloud Config分为服务端和客户端两部分;

​ 服务端称为分布式配置中心,他是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密,解密信息等访问接口。

​ 客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。配置服务器默认采用git来存储配置信息,这样就有利于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容。

SpringCloud config分布式配置中心能干嘛

  • 集中管理配置文件
  • 不同环境、不同配置、动态化的配置更新,分环境部署,比如/dev /test /prod /beta /release
  • 运行期间冬天调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息。
  • 当配置发生变动时,服务不需要重启,即可感知到配置的变化,并应用新的配置。
  • 将配置信息一REST接口的形式暴露

SpringCloud config分布式配置中心与github整合

​ 由于Spring Cloud Config默认使用Git来存储配置文件(也有其他的方式,比如支持SVN和本地文件),但是最推荐的还是Git,而且使用的是http、https访问的形式;

2.通过Git连接本地项目

  1. 在Gitee上创建application.yml配置文件

    spring:
      profiles:
        active: dev
    
    ---
    spring:
      profiles: dev		#测试环境
      application:
          name: springcloud-config-dev
    
    ---
    spring:
      profiles: test	#开发环境
      application:
         name: springcloud-config-test
    
  2. 创建项目:springcloud-config-service-3344

  3. 引入项目依赖(jar包)

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
        <version>2.0.0.RELEASE</version>
    </dependency>
    <!--actuator完善监控信息-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!--web-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
  4. 创建Application.yml配置相关配置

    server:
      port: 3344
    spring:
      application:
        name: springcould-config
    
        #连接远程仓库
      cloud:
        config:
          server:
            git:
              uri: https://gitee.com/you-smile-so-sweet/springcould-config.git
    
  5. 开启相关配置

    package com.ddf.springcloud;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.config.server.EnableConfigServer;
    
    @SpringBootApplication
    @EnableConfigServer     //开启配置服务
    public class Config_Service_3344 {
        public static void main(String[] args) {
            SpringApplication.run(Config_Service_3344.class, args);
        }
    }
    

如果报以下错误:

在这里插入图片描述

说明application.yml配置的文件有误:就是因为去掉了—

在这里插入图片描述

3.通过本地项目连接远程仓库的客户端

  1. 在Gitee上创建config-client配置文件,连接eureka

    spring:
      profiles:
        active: dev
    
    ---
    server:
      port: 8201
    #spring的配置
    spring:
      profiles: dev
      application:
        name: springcould-config
    
    #eureka的配置
    eureka:
      client:
        service-url:
          defaultZone: http://eureka7001.com:7001/eureka/
    
    ---
    server:
      port: 8202
    #spring的配置
    spring:
      profiles: test
      application:
        name: springcould-config
    
    #eureka的配置
    eureka:
      client:
        service-url:
          defaultZone: http://eureka7001.com:7001/eureka/
    
  2. 创建项目springcloud-config-service-3355

  3. 引入项目依赖(jar包)

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
        <version>2.1.1.RELEASE</version>
    </dependency>
    <!--actuator完善监控信息-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!--web-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
  4. 创建Application.yml和bootstrap.yml配置相关配置

    Application.yml(用户级别的配置):

    #用户级别的配置
    spring:
      application:
        name: springcloud-config-client-3355
    

    bootstrap.yml(系统级别的配置):

    #系统级别的配置
    spring:
      cloud:
        config:
          uri: http://localhost:3344
          name: config-client  #需要从git上读取的资源名称,不要后缀
          label: master
          profile: dev
    
  5. 创建Controller层,把我们连接的配置信息显示出来:ConfigClientController

    配置的信息对应gitee远程项目文件上的信息

    在这里插入图片描述

    package com.ddf.springcloud.controller;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @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 getConfig(){
            return "application:" + applicationName
                    + "eurekaServer:" + eurekaServer
                    + "port:" + port;
        }
    }
    
    
  6. 配置启动类测试

    package com.ddf.springcloud;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class Config_server_3355 {
        public static void main(String[] args) {
            SpringApplication.run(Config_server_3355.class, args);
        }
    }
    
  7. 先启动3344项目在启动3355项目,然后访问:http://localhost:8201/config,就可以获取到信息了

    在这里插入图片描述

4.在远程仓库部署Eureka7001

  1. 在Gitee上创建config-eureka配置文件,部署eureka

    spring:
      profiles:
        active: dev
    
    ---
    server:
      port: 7001
    
    spring:
      profiles: dev
      application:
        name: springcloud-config-eureka
    #配置Eureka
    eureka:
      instance:
        hostname: eureka7001.com   #Eureka服务器的实例名称
      client:
        register-with-eureka: false   #表示是否想eureka注册中心注册自己
        fetch-registry: false   #fetch-registry如果为false,则表示自己为注册中心
        service-url:    #监控页面
          # 单击配置:defaultZon: http://${eureka.instance.hostname}:${server.port}/eureka/
          # 集群(关联):
          defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
    
    ---
    server:
      port: 7001
    
    spring:
      profiles: test
      application:
        name: springcloud-config-eureka
    
    #配置Eureka
    eureka:
      instance:
        hostname: eureka7001.com   #Eureka服务器的实例名称
      client:
        register-with-eureka: false   #表示是否想eureka注册中心注册自己
        fetch-registry: false   #fetch-registry如果为false,则表示自己为注册中心
        service-url:    #监控页面
          # 单击配置:defaultZon: http://${eureka.instance.hostname}:${server.port}/eureka/
          # 集群(关联):
          defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
    
  2. 创建项目springcloud-config-eureka-7001

  3. 导入相关依赖

    <!--config-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
        <version>2.1.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
        <version>1.4.6.RELEASE</version>
    </dependency>
    <!--热部署-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
    
  4. 配置application.yml和bootstrap.yml文件

    application.yml

    spring:
      application:
        name: springcloud-config-eureka-7001
    

    bootstrap.yml

    #系统级别的配置
    spring:
      cloud:
        config:
          uri: http://localhost:3344
          name: config-eureka  #需要从git上读取的资源名称,不要后缀
          label: master
          profile: dev
    
  5. 创建启动类

    package com.ddf.springcloud;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    @EnableEurekaServer     //EnableEurekaServer    服务端的启动类,可以接受别人注册进来
    public class ConfigEurekaServer_7001 {
        public static void main(String[] args) {
            SpringApplication.run(ConfigEurekaServer_7001.class, args);
        }
    }
    
  6. 启动项目访问:http://localhost:7001/,就可以通过本地的项目访问到远程仓库的Eureka

5.在远程仓库部署Dept-8001

  1. 在Gitee上创建config-dept配置文件,部署dept-8001配置

    spring:
      profiles:
        active: dev
    
    ---
    server:
      port: 8001
    
    #mybatis配置
    mybatis:
      type-aliases-package: com.ddf.springcloud.pojo
      mapper-locations: classpath:mapper/*.xml
      configuration-properties: classpath:mybatis/mybatis-config.xml
    
    #spring的配置
    spring:
      profiles: dev
      application:
        name: springcloud-config-dept
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: org.gjt.mm.mysql.Driver
        url: jdbc:mysql://localhost:3306/db01?userUnicode=true&characterEncoding=UTF-8
        username: root
        password: 123
    
    #eureka的配置
    eureka:
      client:
        service-url:
          defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
      instance:
        instance-id: springcloud-provider-dept8001  #修改eureka上的Status
    
    
    #配置Status的信息
    info:
      app.name: ddf-springcloud
      company.name: blog.ddf.com
    
    
    ---
    server:
      port: 8002
    
    #mybatis配置
    mybatis:
      type-aliases-package: com.ddf.springcloud.pojo
      mapper-locations: classpath:mapper/*.xml
      configuration-properties: classpath:mybatis/mybatis-config.xml
    
    #spring的配置
    spring:
      profiles: test
      application:
        name: springcloud-config-dept
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: org.gjt.mm.mysql.Driver
        url: jdbc:mysql://localhost:3306/db02?userUnicode=true&characterEncoding=UTF-8
        username: root
        password: 123
    
    #eureka的配置
    eureka:
      client:
        service-url:
          defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
      instance:
        instance-id: springcloud-provider-dept8001  #修改eureka上的Status
    
    #配置Status的信息
    info:
      app.name: ddf-springcloud
      company.name: blog.ddf.com
    
  2. 创建项目springcloud-config-dept-8001

  3. 导入依赖

    <!--config-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
        <version>2.1.1.RELEASE</version>
    </dependency>
    <!--eureka-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
        <version>1.4.6.RELEASE</version>
    </dependency>
    <!--actuator完善监控信息-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!--我们需要拿到实体类,所有要配置api  module-->
    <dependency>
        <groupId>org.example</groupId>
        <artifactId>springcloud-api</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <!--引用父类的jar包-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
    </dependency>
    <!--test-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-test</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--jetty-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>
    <!--热部署工具,可以不用频繁的重启项目-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
    
  4. 创建Dao层:DeptDao

    package com.ddf.springcloud.dao;
    
    import com.ddf.springcloud.pojo.Dept;
    import org.apache.ibatis.annotations.Mapper;
    import org.springframework.stereotype.Repository;
    
    import java.util.List;
    
    @Mapper
    @Repository
    public interface DeptDao {
    
        //添加
        public boolean addDept(Dept dept);
    
        //通过id查询
        public Dept findById(Long id);
    
        //查询所有
        public List<Dept> findAll();
    }
    
  5. 创建service层:DeptService和DeptServiceImpl

    DeptService

    package com.ddf.springcloud.service;
    
    import com.ddf.springcloud.pojo.Dept;
    
    import java.util.List;
    
    public interface DeptService {
        //添加
        public boolean addDept(Dept dept);
    
        //通过id查询
        public Dept findById(Long id);
    
        //查询所有
        public List<Dept> findAll();
    }
    

    DeptServiceImpl

    package com.ddf.springcloud.service;
    
    import com.ddf.springcloud.dao.DeptDao;
    import com.ddf.springcloud.pojo.Dept;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    @Service
    public class DeptServiceImpl implements DeptService {
    
        @Autowired
        private DeptDao deptDao;
    
        public boolean addDept(Dept dept) {
            return deptDao.addDept(dept);
        }
    
        public Dept findById(Long id) {
            return deptDao.findById(id);
        }
    
        public List<Dept> findAll() {
            return deptDao.findAll();
        }
    }
    
  6. 创建Controller层:DeptController

    package com.ddf.springcloud.controller;
    
    import com.ddf.springcloud.pojo.Dept;
    import com.ddf.springcloud.service.DeptService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.cloud.client.ServiceInstance;
    import org.springframework.cloud.client.discovery.DiscoveryClient;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.List;
    
    //提供Restful服务
    @RestController
    public class DeptController {
    
        @Autowired
        private DeptService deptService;
    
        //获取一些配置的信息,得到具体的微服务
        @Autowired
        private DiscoveryClient client;
    
        @PostMapping("/dept/add")
        public boolean addDept(Dept dept){
            return deptService.addDept(dept);
        }
    
        @GetMapping("/dept/get/{id}")
        public Dept getDept(@PathVariable Long id){
            return deptService.findById(id);
        }
    
        @GetMapping("/dept/list")
        public List<Dept> findAll(){
            return deptService.findAll();
        }
    
        //通过注册进来的微服务,去获取一些消息
        @GetMapping("/dept/discovery")
        public Object discovery(){
            //获取微服务列表的清单
            List<String> services = client.getServices();
            System.out.println("获取到了微服务的信息:" + services);
    
            //得到一个具体的微服务新,通过具体的微服务id,application
            List<ServiceInstance> instances = client.getInstances("SPRINGCLOUD-PROVIDER-DEPT");
            //打印出相关信息
            for(ServiceInstance instance : instances){
                System.out.println(instance.getHost());
                System.out.println(instance.getPort());
                System.out.println(instance.getUri());
                System.out.println(instance.getServiceId());
            }
            return this.client;
        }
    }
    
  7. 创建启动类:ConfigEurekaDept_8001

    package com.ddf.springcloud;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    
    @SpringBootApplication
    @EnableEurekaClient     //在服务启动后自动注册到Eureka中,开启Eureka的连接
    @EnableDiscoveryClient  //服务发现
    public class ConfigEurekaDept_8001 {
        public static void main(String[] args) {
            SpringApplication.run(ConfigEurekaDept_8001.class, args);
        }
    }
    
  8. 启动项目访问:http://localhost:8001/,就可以通过本地的项目访问到远程仓库的8001端口了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值