SpringCloud-Config组件使用

1.什么是Config

0.说明

1.统一配置中心组件流程图

2.Config Server 开发

配置服务,搭建基本的springcloud项目环境,使用consul注册中心

1.引入依赖

<!--引入统一配置中心-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-config-server</artifactId>
</dependency>

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.md</groupId>
    <artifactId>06-configserver7878</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>06-configserver7878</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR6</spring-cloud.version>
    </properties>

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

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

        <!--引入consul依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>

        <!-- 这个包是用做健康度监控的-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!--引入统一配置中心-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>

    </dependencies>

    <!--全局管理springcloud版本,并不会引入具体依赖-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.开启统一配置中心服务

@SpringBootApplication
@EnableConfigServer
public class Configserver7878Application {
public static void main(String[] args) {
SpringApplication.run(Configserver7878Application.class, args);
}
}

3.修改配置文件

server.port=7878
spring.application.name=configserver
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500

4.直接启动服务报错

  • 没有指定远程仓库的相关配置

5.创建远程仓库

  • github创建一个仓库

6.复制仓库地址

https://github.com/shanqiul/configserver.git

7.在统一配置中心服务中修改配置文件指向远程仓库地址

spring.cloud.config.server.git.uri=https://github.com/shanqiul/configserver.git
# 这个不设置报错,现在默认是main分支
spring.cloud.config.server.git.default-label=main
#spring.cloud.config.server.git.username=       私有仓库访问用户名
#spring.cloud.config.server.git.password=私有仓库访问密码

8.再次启动统一配置中心

9.拉取远端配置 [三种方式]

首先先写文件,配置参数

进行测试,注意格式test-xxx

10.拉取远端配置规则

  • label/name-profiles.yml
    label 代表去那个分支获取 默认使用master分支 name 代表读取那个具体的配置文件文件名称
    `profile 代表读取配置文件环境

11.查看拉取配置详细信息

12.指定分支和本地仓库位置

spring.cloud.config.server.git.basedir=F:\Java\code\springcloud\06-configserver7878\src\main\resources\localresp #一定要是一个空目录,在首次会将该目录清空
spring.cloud.config.server.git.default-label=main   #指定使用远程仓库中那个分支中内容

3.Config Client 开发

还是搭建一个基本的springcloud项目

1.项目中引入config client依赖

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.md</groupId>
    <artifactId>06-configclient7879</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>06-configclient7879</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR6</spring-cloud.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--引入consul依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>

        <!-- 这个包是用做健康度监控的-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!--引入hystrix-->
        <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

         <!--config client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>

    </dependencies>
    <!--全局管理springcloud版本,并不会引入具体依赖-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

2.编写配置文件

spring.cloud.config.discovery.enabled=true                #开启统一配置中心服务
spring.cloud.config.discovery.service-id=configserver     #指定统一配置服务中心的服务唯一标识
spring.cloud.config.label=main   #指定从仓库的那个分支拉取配置
spring.cloud.config.name=client#指定拉取配置文件的名称
spring.cloud.config.profile=dev#指定拉取配置文件的环境

3.远程仓库创建配置文件

- client.properties[用来存放公共配置]
spring.application.name=configclient
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500

- client-dev.properties  [用来存放研发相关配置][注意:这里端口为例,以后不同配置分别存放]
server.port=9099

- client-prod.properties[用来存放生产相关配置]
server.port=9098

注意:
此时再访问client-dev.properties,就会包括client.properties里面得内容
client.properties用来存放一些公共得配置,每个client中都存在得内容

4.启动客户端服务进行远程配置拉取测试

  • 直接启动过程中发现无法启动直接报错

报错原因

  • 项目中目前使用的是application.properties启动项目,使用这个配置文件在springboot项目启动过程中不会等待远程配置拉取,直接根据配置文件中内容启动,因此当需要注册中心,服务端口等信息时,远程配置还没有拉取到,所以直接报错

解决方案

  • 应该在项目启动时先等待拉取远程配置,拉取远程配置成功之后再根据远程配置信息启动即可,为了完成上述要求springboot官方提供了一种解决方案,就是在使用统一配置中心时应该将微服务的配置文件名修改为bootstrap.(properties|yml),

bootstrap.properties作为配置启动项目时,会优先拉取远程配置,远程配置拉取成功之后根据远程配置启动当前应用。

5.再次启动服务

4.手动配置刷新

1.说明

  • 在生产环境中,微服务可能非常多,每次修改完远端配置之后,不可能对所有服务进行重新启动,这个时候需要让修改配置的服务能够刷新远端修改之后的配置,从而不要每次重启服务才能生效,进一步提高微服务系统的维护效率。在springcloud中也为我们提供了手动刷新配置和自动刷新配置两种策略,这里我们先试用手动配置文件刷新。

2.在config client端加入刷新暴露端点

management.endpoints.web.exposure.include=*            #开启所有web端点暴露  [推荐使用这种]

3.在需要刷新代码的类中加入刷新配置的注解

@RestController
@RefreshScope
@Slf4j
public class TestController {
    @Value("${name}")
    private String name;
    @GetMapping("/test/test")
    public String test(){
      log.info("当前加载配置文件信息为:[{}]",name);
      return name;
    }
}

4.在远程配置中加入name并启动测试

5.启动之后直接访问

6.修改远程配置

7.修改之后在访问

  • 发现并没有自动刷新配置?
  • 必须调用刷新配置接口才能刷新配置

8.手动调用刷新配置接口

再次访问发现配置已经成功刷新

(0)

相关推荐

  • 配置中心新贵:Nacos,阿里开源,真香!!

    作者:废物大师兄 来源:www.cnblogs.com/cjsblog/p/14007311.html 本文探讨Nacos作为配置中心,如何实现不同环境(开发.测试.灰度.正式)的配置管理问题. 就像 ...

  • SpringCloud之Zuul

    [前面的话]书接上文,前面已经讲过了SpringCloud的注册中心Eureka.Ribbon和Feign等等,如果有不清楚的也可以去看看我的微服务系列文章.这篇文章我要说的是微服务中的网关. 壹.Z ...

  • SpringCloud微服务架构实战:微服务治理

    微服务治理 Spring Cloud 工具套件为微服务治理提供了全面的技术支持.这些治理工具主要包括服务的注册与发现.负载均衡管理.动态路由.服务降级和故障转移.链路跟踪.服务监控等.微服务治理的主要 ...

  • SpringCloud不归路---Eureka

    一 Eureka服务治理体系 1.1 服务治理 服务治理是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现. Spring Cloud Eureka是Spring Cl ...

  • springcloud组件技术分享(推荐)

    目录 1. 项目初始化配置 2. Eureka 3. Ribbon 4. Feign学习 5. hystrix学习 6. springboot的健康监控actuator 7. feign配合Hystr ...

  • springcloud组件技术分享

    目录1. 项目初始化配置2. Eureka3. Ribbon4. Feign学习5. hystrix学习6. springboot的健康监控actuator7. feign配合Hystrix使用8. ...

  • 光伏产业研究-组件环节

           前两篇推文我们总结了硅料.硅片以及电池片环节,本篇就是组件环节啦! 由于单片太阳电池片输出电压较低,未封装的电池片由于环境的影响电极容易脱落,因此必须将一定数量的单片电池采用串.并联的方 ...

  • 组件企业业绩简析

    本文将对隆基.晶澳.天合三家公司20年业绩和2021年一季度业绩进行简要分析. 对于这三家组件龙头企业,按理说应该花很长的篇幅去阐述.去细致的分析其业绩,并给出相关的论据.论点.但在我们将年报.季报看 ...

  • 【特医食品】浦索—特殊医学用途蛋白质组件配方粉

    按照2016版的中国居民膳食指南和营养学家推荐,成人每天需要1g/kg体重的蛋白质才能满足身体需求,对于运动量大的人群来说,因为蛋白质需求更大,需要1.5-1.8g/kg体重去摄入. 目前我们年轻一代 ...

  • UG英制转公制简单方法及UG装配:该组件与显示部件的单位不同,因此不能作为工作部件

    英制部件 导出部件 新建部件注意为毫米单位 导入刚才的部件,会出现此对话框,按确定 测量后发现部件尺寸大,实际是把英寸放大了,让后缩放体就行了 缩放体比例因子 缩放后测量尺寸正常

  • SpringCloud SpringBoot OAuth2 Spring Security Redi...

    来自:CSDN,作者:myCat 链接:https://blog.csdn.net/WYA1993/article/details/85050120 开发环境: Windows10 Intellij ...

  • 中间件:ElasticSearch组件RestHighLevelClient用法详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.基础API简介 1.RestHighLevelClient RestHighLevelClient的API作为ElasticSearch备 ...

  • go好用的类型转换第三方组件

    Cast介绍 开源地址 https://github.com/spf13/cast Cast是什么? Cast是一个库,以一致和简单的方式在不同的go类型之间转换. Cast提供了简单的函数,可以轻松 ...

  • 360安全浏览器服务组件是什么?怎么彻底删除?

    最近有用户反馈系统中总是有360安全浏览器服务组件在运行,开机就有,显而易见360安全浏览器服务组件是360浏览器的一个组件,那么这个360安全浏览器服务组件是什么,干什么用的呢?也有用户问如何才能彻 ...