zoukankan      html  css  js  c++  java
  • 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:Javacodespringcloud6-configserver7878srcmain
    esourceslocalresp 		#一定要是一个空目录,在首次会将该目录清空
    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.手动调用刷新配置接口

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

    作者:山丘!

    -------------------------------------------

    你闻讯而来,我大喜过望,我在这等你,你又在哪呢?喜欢的话加一个“关注”呗!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

  • 相关阅读:
    【转载】怎样使用ZEMAX导出高质量的图像动画
    shell中的单引号,双引号,反引号
    docker容器以非root用户启动应用
    js操作json的基本方法
    页岩油
    shell中使用ssh
    强一致性 弱一致性 最终一致性
    CSV和excel
    workbook sheetname最大长度
    ipvs了解
  • 原文地址:https://www.cnblogs.com/mengd/p/14145274.html
Copyright © 2011-2022 走看看