热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringCloud项目(二):springcloudconfig+eureka+git远程仓库配置文件

Config远程git仓库操作分布式配置中心所有服务的配置文件归于中心仓库管理,springcloudconfig提供了将配置服务放在本地,也提供了

Config远程git仓库操作


分布式配置中心

所有服务的配置文件归于中心仓库管理,spring cloud config 提供了将配置服务放在本地,也提供了远程仓库中,提供了两个角色,一是config server,二是config client


git
---->config 1,config 2,congfig3(可以看成一个仓库的不同分支,为不同服务提供定制的配置文件)
—>将config server注册在eureka中—>config client通过eureka的中地址获取仓库地址,连接上config server


在这里插入图片描述


新建项目顺序


1. git仓库,提供配置文件


2. eureka项目,config服务端和客户端都需要注册在上面


3. configServer项目,服务端主要负责连接git,获取git参数,并且注册在eureka中,方便客户端调用


4. configClient项目,客户端通过传递参数,从eureka中获取服务端的地址去对应参数的配置文件


一、新建配置文件git仓库,并将配置文件放入库中 (https://github.com/zz790609619/configRes/blob/master/application.yml)


server: port: 8090spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriverClassName: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&zeroDateTimeBehavior=convertToNullusername: rootpassword: 999521initialSize: 5minIdle: 1maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000jpa:database: mysqlshow-sql: truehibernate:ddl-auto: none

二、新建Eurake项目,作为服务注册中心(https://github.com/zz790609619/eurekaserver)


作用:为springcloud config server(服务端)、springcloud config client(客户端)提供统一的注册地址

pom.xml


<project xmlns&#61;"http://maven.apache.org/POM/4.0.0" xmlns:xsi&#61;"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&#61;"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0modelVersion><parent><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-parentartifactId><version>2.2.4.RELEASEversion><relativePath/> parent><groupId>com.examplegroupId><artifactId>eurekazzartifactId><version>0.0.1-SNAPSHOTversion><name>eurekazzname><description>Demo project for Spring Bootdescription><properties><java.version>1.8java.version><spring-cloud.version>Hoxton.SR1spring-cloud.version>properties><dependencies><dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-testartifactId><scope>testscope><exclusions><exclusion><groupId>org.junit.vintagegroupId><artifactId>junit-vintage-engineartifactId>exclusion>exclusions>dependency>dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-dependenciesartifactId><version>${spring-cloud.version}version><type>pomtype><scope>importscope>dependency>dependencies>dependencyManagement><build><plugins><plugin><groupId>org.springframework.bootgroupId><artifactId>spring-boot-maven-pluginartifactId>plugin>plugins>build>project>

application.yml

#设置tomcat服务端口号
server:port : 8761
spring:application:name: eurekazz
eureka:client:fetch-registry: false #自己就是注册中心&#xff0c;负责维护服务&#xff0c;不需要去检索服务register-with-eureka: false #不向注册中心注册自己

启动类

&#64;SpringBootApplication
&#64;EnableEurekaServer //开启eureka服务
public class EurekazzApplication {public static void main(String[] args) {SpringApplication.run(EurekazzApplication.class, args);}
}

当控制台出现如下提示&#xff0c;则可以打开http://localhost:8761/&#xff0c;就能看到eureka服务页面
在这里插入图片描述


三、新建Springcloud configServer 项目。作为配置中心的服务端&#xff08;项目地址&#xff1a;https://github.com/zz790609619/springcloud-configserver&#xff09;


项目作用&#xff1a;提供连接git的参数并且连接git&#xff0c;获取到git上的配置文件&#xff0c;并且将本身注册在eureka中&#xff0c;方便客户端通过配置中心的地址取获取git上的远程配置文件

  1. pom.xml


<project xmlns&#61;"http://maven.apache.org/POM/4.0.0" xmlns:xsi&#61;"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&#61;"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0modelVersion><parent><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-parentartifactId><version>2.1.7.RELEASEversion><relativePath/> parent><groupId>com.examplegroupId><artifactId>configseverartifactId><version>0.0.1-SNAPSHOTversion><name>configsevername><description>Demo project for Spring Bootdescription><properties><java.version>1.8java.version><spring-cloud.version>Greenwich.SR2spring-cloud.version>properties><dependencies><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starterartifactId>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-testartifactId><scope>testscope><exclusions><exclusion><groupId>org.junit.vintagegroupId><artifactId>junit-vintage-engineartifactId>exclusion>exclusions>dependency>




<dependency> <groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-eurekaartifactId>dependency><dependency> <groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>dependency><dependency> <groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-netflix-hystrixartifactId>dependency><dependency> <groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-config-serverartifactId><version>2.1.3.RELEASEversion>dependency><dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-commonsartifactId><version>2.1.2.RELEASEversion>dependency><dependency> <groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-webartifactId>dependency>dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-dependenciesartifactId><version>${spring-cloud.version}version><type>pomtype><scope>importscope>dependency>dependencies>dependencyManagement><build><plugins><plugin><groupId>org.springframework.bootgroupId><artifactId>spring-boot-maven-pluginartifactId>plugin>plugins>build>project>

  1. bootstrap.yml&#xff08;一般将重要参数放入该文件里&#xff0c;优先级高&#xff0c;bootstrap一定会被读取&#xff08;覆盖application.yml的相同配置&#xff09;&#xff09;

server:port: 6666 #端口号
eureka:client:service-url:defaultZone: http://127.0.0.1:8761/eureka #注册到注册中心instance:prefer-ip-address: true #显示ip
spring:application:name: configsever #在注册中心显示的主机名cloud:config:server:git:uri: https://github.com/zz790609619/configRes #github的地址username: 790609619&#64;qq.com #github的账户名password: xxxxxx #gitHub的密码clone-on-start: true

  1. 启动类

package com.example.configsever;import org.springframework.boot.SpringApplication;import org.springframework.cloud.client.SpringCloudApplication;import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;&#64;EnableEurekaClient //加入注册中心
&#64;SpringCloudApplication
&#64;EnableConfigServer //启用配置服务端
/*** author : ww*/public class ConfigseverApplication {public static void main(String[] args) {SpringApplication.run(ConfigseverApplication.class, args);}
}

  1. 启动结果
    在这里插入图片描述
  2. 访问http://localhost:8761/,查看是否注册在eureka上
    在这里插入图片描述
  3. 用接口调用软件&#xff08;postman&#xff09;访问&#xff0c;获取到git上面的配置文件即为成功

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



{application} 就是应用名称&#xff0c;对应到配置文件上来&#xff0c;就是配置文件的名称部分&#xff0c;例如我上面创建的配置文件。
{profile} 就是配置文件的版本&#xff0c;我们的项目有开发版本、测试环境版本、生产环境版本&#xff0c;对应到配置文件上来就是以 application-{profile}.yml 加以区分&#xff0c;例如application-dev.yml、application-sit.yml、application-prod.yml。
{label} 表示 git 分支&#xff0c;默认是 master 分支&#xff0c;如果项目是以分支做区分也是可以的&#xff0c;那就可以通过不同的 label 来控制访问不同的配置文件了


在这里插入图片描述


四、新建Springcloud configClient 项目。作为配置中心的客户端&#xff08;项目地址&#xff1a;https://github.com/zz790609619/configclient&#xff09;


项目作用&#xff1a;需要用到git中配置文件的项目&#xff0c;通过访问eureka中的configserver的地址&#xff0c;传递参数去获取git中对应分支的配置文件

  1. pom.xml

<dependencies><dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-configartifactId>dependency><dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>dependency><dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-eurekaartifactId>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-actuatorartifactId>dependency>dependencies>

  1. bootstrap.yml

spring:application:name: configclient #应用名称cloud:config:label: master #分支名discovery:enabled: trueservice-id: configsever # 服务端的spring.application.name 便于从eureka中寻找对应的名字的地址&#xff0c;以获取git中参数fail-fast: true #快速获取失败profile: master #相同文件名的后缀&#xff0c;application-dev.yml、application-master.yml
eureka:client:serviceUrl:defaultZone: http://127.0.0.1:8761/eureka/ #注册在eureka

  1. 启动类

&#64;SpringCloudApplication
public class ConfigclientApplication {public static void main(String[] args) {SpringApplication.run(ConfigclientApplication.class, args);}
}

  1. 运行项目&#xff0c;查看控制台的端口号是否和git中一致&#xff1f;看看eureka是否有当前的服务注册在上面&#xff1f;
    在这里插入图片描述

补充说明&#xff1a;


ConfigClient如何获取到git中的文件内容&#xff1f;

  1. configclient注册在eureka中&#xff0c;通过配置文件中spring.cloud.congfig中discovery.service-id去eureka中获取该id对应的服务端的地址&#xff08;点击下图标红&#xff0c;则能获取该服务端的ip&#43;端口 http://192.168.93.1:6666/&#xff09;
    在这里插入图片描述
  2. 根据配置文件中的label作为参数&#xff0c;通过步骤1获取的地址去获取git对应label分支中的文件&#xff0c;作为客户端的配置文件&#xff0c;如果该分支下有多个文件&#xff0c;则根据profile去获取对应的版本。

ConfigServer如何与git进行连接&#xff1f;

  1. 项目启动类中通过注解&#xff08;&#64;EnableConfigServer&#xff09;中的ConfigServerConfiguration
    在这里插入图片描述
  2. 打开ConfigServerConfiguration&#xff0c;可以看到只会返回一个marker,查询marker被调用的类
    在这里插入图片描述
  3. 找到ConfigServerAutoConfiguration类&#xff0c;可以看到与config有关的是EnvironmentRepositoryConfiguration类
    在这里插入图片描述
  4. 查看import的类则能看到git相关的&#64;Import({CompositeRepositoryConfiguration.class, JdbcRepositoryConfiguration.class, VaultConfiguration.class, VaultRepositoryConfiguration.class, CredhubConfiguration.class, CredhubRepositoryConfiguration.class, SvnRepositoryConfiguration.class, NativeRepositoryConfiguration.class, *GitRepositoryConfiguration.class*, DefaultRepositoryConfiguration.class})
  5. 根据&#64;Profile({“git”}) 可以获取到配置文件中配置的参数
    在这里插入图片描述
  6. 因为GitRepositoryConfiguration继承于DefaultRepositoryConfiguration类&#xff0c;图中标红的类都实现了EnvironmentRepositoryFactory的方法在这里插入图片描述
  7. EnvironmentRepositoryFactory继承与EnvironmentRepository&#xff0c;EnvironmentRepository中存在一个findone的方法
    在这里插入图片描述
  8. 看下方法的参数&#xff0c;和我们配置文件中的参数有点像&#xff0c;可以查到ResourceController中有该方法&#xff0c;可以大概推测Config Server是通过建立一个RestController来接收读取配置请求的&#xff0c;然后使用EnvironmentRepository来进行配置查询&#xff0c;返回一个org.springframework.cloud.config.environment.Environment对象的json串&#xff0c;推测客户端接收时也应该是反序列化为org.springframework.cloud.config.environment.Environment的一个实例
  9. 所以client&#xff08;客户端&#xff09;从服务端获取序列化的参数&#xff0c;并且将之反序列化&#xff0c;作用于自己项目。

推荐阅读
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • 移动端常用单位——rem的使用方法和注意事项
    本文介绍了移动端常用的单位rem的使用方法和注意事项,包括px、%、em、vw、vh等其他常用单位的比较。同时还介绍了如何通过JS获取视口宽度并动态调整rem的值,以适应不同设备的屏幕大小。此外,还提到了rem目前在移动端的主流地位。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文主要复习了数据库的一些知识点,包括环境变量设置、表之间的引用关系等。同时介绍了一些常用的数据库命令及其使用方法,如创建数据库、查看已存在的数据库、切换数据库、创建表等操作。通过本文的学习,可以加深对数据库的理解和应用能力。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 我想获得具有相同日期的行数.但一秒钟必须可以忽略不计.例如;2012-01-0313:12:28和2012-01-0313:12:27应该被认为是一样的.(我的表名是myTable ... [详细]
author-avatar
手机用户2502886335
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有