springcloud的服务配置中心config-server

前言

本章内容就是学习springcloud中的服务配置中心(config)

什么是服务配置中心?

在一开始我们就知道微服务的架构与单机项目之间有什么区别,也就是多台服务器之间的区别。那么因为微服务的分布式架构往往一个项目需要分开部署到各台服务器上,所以也代表着如果要更改一些yml配置文件的话,那相对而言是一个非常大的一个工程了,比如:mysql配置的一个用户名和密码。那么为了简化维护项目的工程,springcloud增加了服务配置中心(config)的一个解决措施,也就是来加快开发人员维护的效率。

本次我的项目的配置文件存放在githubhttps://github.com/liwangwang321/configserver

当然也可以放到码云等平台,svn本地仓库也行。


config-server从github获取数据

1、创建模拟配置数据

代码可参考git上:https://github.com/liwangwang321/configserver
在这里插入图片描述


2、创建config-server服务配置中心服务端

创建项目名:microservice-config-server-4001
在这里插入图片描述

这个项目的配置文件就增加了这个依赖

 <!--服务配置中心的config服务端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>

pom.xml

 <?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>
    <!--保持使用版本的一致1.0-SNAPSHOT-->
    <parent>
        <groupId>com.liwangwang</groupId>
        <artifactId>springcloud</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>microservice-config-server-4001</artifactId>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--服务配置中心的config服务端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>

    </dependencies>

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

</project>

yml文件

在这里插入图片描述

server:
  port: 4001

spring:
  application:
    name:  microservice-config
  cloud:
    config:
      server:
        git:
          uri: https://github.com/liwangwang321/configserver.git
          search-paths: aaa,bbb


启动类:
在这里插入图片描述


3、测试

仓库中的配置文件会被转换成web接口,访问可以参照以下的规则:

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

以springcloud-config-dev.properties为例,它的application是springcloud-config,profile是dev,label是分支的意思,如果只有一个主分支,可以不写,默认会访问master分支,client会根据填写的参数来选择读取对应的配置。

我们对上面的一个代码进行一个改造咱们再来看看
在这里插入图片描述
在这里插入图片描述

看结果:
路径:http://localhost:4001/application-test.yml
在这里插入图片描述
路径:http://localhost:4001/application-dev.yml
在这里插入图片描述


config-client(Erueka)从config-server获取配置

1、创建模拟配置文件(erueka_config.yml)

代码可参考git上:https://github.com/liwangwang321/configserver
在这里插入图片描述
yml文件讲解:

在这里插入图片描述
配置文件控制
在这里插入图片描述


2、创建config-client-erueka配置中心客户端

创建名:microservice-eureka-server-config-2004

在这里插入图片描述
pom.xml增加文件

 <!--从配置中心的获取-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <!-- eureka是一个服务注册,服务发现框架基于rset的服务,这个是服务注册中心-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>

pom.xml全文件

<?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>
    <!--保持使用版本的一致1.0-SNAPSHOT-->
    <parent>
        <groupId>com.liwangwang</groupId>
        <artifactId>springcloud</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>microservice-eureka-server-config-2004</artifactId>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--从配置中心的获取-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <!-- eureka是一个服务注册,服务发现框架基于rset的服务,这个是服务注册中心-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>

    </dependencies>

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

</project>

简单的说:bootstrap.yml会比application.yml读取的优先级更高,读完了bootstrap.yml文件才会读后面的配置

bootstrap.yml

spring:
  application:
    name: microservice-eureka-server-config
  cloud:
    config:
      name: eureka_config
      uri: http://configserver.javawwl.com:4001  # 配置configserver地址
      profile: test  # 级别
      label: master  # 分支 git中 默认master

application.yml

spring:
  application:
    name: microservice-eureka-server-config



启动类
在这里插入图片描述


3、测试

在这里插入图片描述

在bootstrap文件中使用dev级别(2004)。
在这里插入图片描述
测试路径:http://localhost:2004
在这里插入图片描述

在bootstrap文件中使用test级别(2005)。
在这里插入图片描述
测试路径:http://localhost:2005
在这里插入图片描述

config-client(provider)从config-server获取配置

1、创建配置模拟数据(provider_config.yml)

代码可参考git上:https://github.com/liwangwang321/configserver

在这里插入图片描述
因为长度问题,自行看代码即可,跟上面的案例差不多
在这里插入图片描述


2、创建config-client-provider配置中心客户端

创建名字:microservice-student-provider-config-1004
在这里插入图片描述

pom.xml增加了

		<!--config配置中心的客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>

全体pom.xml文件
额,有很多文件都不是本次测试所需要的,但是装了也不影响

<?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>
    <!--保持使用版本的一致1.0-SNAPSHOT-->
    <parent>
        <groupId>com.liwangwang</groupId>
        <artifactId>springcloud</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>microservice-student-provider-config-1004</artifactId>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!--相当于全局的一个依赖关系,这个导入能确保整个项目使用的包版本一致
            比如全局中的: spring-cloud-dependencies
                           spring-boot-dependencies
                           druid-spring-boot-starter

        -->
        <dependency>
            <groupId>com.liwangwang</groupId>
            <artifactId>microservice-common</artifactId>
        </dependency>
        <!--处理web请求-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--test测试的包-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--使用的数据库关系映射框架是jpa-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!--使用的是mysql数据库-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--使用tomcat-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </dependency>
        <!--druid数据源-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
        </dependency>
        <!--  修改后立即生效,热部署  -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>springloaded</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <!--需要引入公共模块的实体类等(在导入的时候出现)-->
        <dependency>
            <groupId>com.liwangwang</groupId>
            <artifactId>microservice-common</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
        <!-- actuator监控引入,点击后的追责 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--添加注册中心Eureka相关配置,就是说这个是客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <!--config配置中心的客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <!--Hystrix相关依赖,用来处理服务处理异常情况-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
        </dependency>




    </dependencies>

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

</project>

bootstrap.yml

spring:
  application:
    name: microservice-student-provider-config
  cloud:
    config:
      name: provider_config
      uri: http://configserver.javawwl.com:4001  # 配置configserver地址
      profile: dev  # 级别
      label: master  # 分支 git中 默认master


application.yml

spring:
  application:
    name: microservice-student-provider-config


启动类
在这里插入图片描述


3、测试

可以自行修改测试。
在bootstrap文件中使用dev级别(1007)。
在这里插入图片描述

provider_config.yml
在这里插入图片描述

http://localhost:2004
成功注册进了erueka的中心,这也代表着成功从配置中心获取到了配置信息。
在这里插入图片描述

配置搜索路径

代码可参考git上:https://github.com/liwangwang321/configserver

在这里插入图片描述
在application.yml文件中
在这里插入图片描述

打开config-server配置中心:
输入:http://localhost:4001/nns-test.yml
在这里插入图片描述
输入:http://localhost:4001/nns2-dev.yml
在这里插入图片描述
自行测试
输入:http://localhost:4001/nns-dev.yml
输入:http://localhost:4001/nns3-dev.yml


后记

一个仓库的的配置文件都存放在这,
简单的说就是自己的本地仓库。
在这里插入图片描述

随着分布式项目越来越大,勤劳的程序猿们会开始面临一个挑战,配置文件会越来越繁杂,虽然spring提供了一个鸡肋版的解决方案,spring.profiles.active,在大型的分布式项目体系中,聊胜于无吧,手动维护配置文件的痛苦,生产,UAT,测试,开发环境的隔离,额外的配置文件,如:logback.xml日志的配置文件,bootstrap.properties配置文件,当系统中有几十个服务,相应的会有上百个配置文件,简直就是史诗级的灾难大片,每次发布上线,都要手动去检查配置文件,相应的服务都需要重启,那么,有没有一种方案,可以自动更新配置,并且对版本做出相应的控制,恰好,springcloud为我们提供了这样一种工具,虽然很多方面都还不完善,配置能力比较弱,但是也给我们提供了一种思路。

市面上有很多配置中心,BAT每家都出过,360的QConf、淘宝的diamond、百度的disconf都是解决这类问题。国外也有很多开源的配置中心Apache Commons Configuration、owner、cfg4j等等。这些开源的软件以及解决方案都很优秀,也存在这样或者那样的缺陷。今天我们要了解的Spring Cloud Config,可以无缝的和spring体系相结合,够方便够简单颜值高。
参考博客:https://www.cnblogs.com/babycomeon/p/11134717.html

发布了143 篇原创文章 · 获赞 136 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43943548/article/details/103285476