一起来学Spring Cloud | 第七章:分布式配置中心(Spring Cloud Config)

上一章节,我们讲解了服务网关zuul,本章节我们从git和本地两种存储配置信息的方式来讲解springcloud的分布式配置中心-SpringCloudConfig。一、SpringCloudConfig简介:SpringCloudConfig项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,c...

上一章节,我们讲解了服务网关zuul,本章节我们从git和本地两种存储配置信息的方式来讲解springcloud的分布式配置中心-Spring Cloud Config。

一、Spring Cloud Config简介:

Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。

二、新建springcloud-config-server模块:

1. 参考:一起来学Spring Cloud | 第一章 :如何搭建一个多模块的springcloud项目 来新建一个基本模块结构

2. 修改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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.haly</groupId><artifactId>springcloud</artifactId><version>0.0.1-SNAPSHOT</version></parent><groupId>com.haly</groupId><artifactId>springcloud-config-server</artifactId><version>0.0.1-SNAPSHOT</version><name>springcloud-config-server</name><description>新建一个config server项目</description><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>  </dependency>  <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>  </dependency><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>

3. 新建入口启动类SpringcloudConfigServerApplication

@EnableConfigServer,表示开启Config Server

package com.haly;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.cloud.config.server.EnableConfigServer;@EnableConfigServer@SpringBootApplication@EnableDiscoveryClientpublic class SpringcloudConfigServerApplication {  public static void main(String[] args) {SpringApplication.run(SpringcloudConfigServerApplication.class, args); }}

4. 修改application.properties文件(git方法存储配置)

在Github上创建一个项目,并在上面添加配置文件config-client.properties,配置文件里添加一个属性config=NewConfig !

application.properties中配置服务信息以及git信息

spring.application.name=springcloud-config-serverserver.port=7001eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/spring.cloud.config.server.git.uri=https://github.com/FunriLy/springcloud-study/spring.cloud.config.server.git.searchPaths=config-repospring.cloud.config.server.git.username=Usernamespring.cloud.config.server.git.password=Password

启动工程 Config Server,浏览器输入:http://localhost:7001/config-client/default/master,得到结果如下

{ "name": "config-client", "profiles": [  "default" ], "label": null, "version": "52b88000fc46a8b1d72a2979f4721d45a3d1f429", "state": null, "propertySources": [  {"name": "https://github.com/FunriLy/springcloud-study//config-repo/config-client.properties","source": { "configword": "NewConfig !"}  } ]}

三、新建springcloud-config模块(可不要):

其实我在工作中喜欢创建一个springcloud-config模块,没有业务代码,只有pom.xml文件和resources目录,resources放一下公共的配置文件,可以给其它模块引用

例如配置:

spring-data-mysql.xml 文件

spring-data-redis-single.xml 文件

spring-jdbc-mysql.xml 文件

bootstrap.yml 配置文件注意这里是bootstrap.properties而不是appliction.properties因为bootstrap.properties会在应用启动之前读取,而spring.cloud.config.uri会影响应用启动

1. 新增pom.xml文件

<?xml version="1.0"?><project  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"  xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent>  <groupId>com.sinaif</groupId>  <artifactId>sinaif-weibo-opt</artifactId>  <version>1.0.0-SNAPSHOT</version>  <relativePath>../pom.xml</relativePath> </parent> <groupId>com.sinaif</groupId> <artifactId>sinaif-config</artifactId> <name>${project.artifactId}</name> <properties>  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies>  <dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope>  </dependency> </dependencies> <build>  <resources><resource> <directory>src/main/resources</directory> <filtering>true</filtering></resource>  </resources> </build></project>

2. 新增bootstrap.yml文件(可以统一配置config,eureka ,hystrix等待)

spring: cloud:  config:name: config-clientprofile: defaultlabel: masteruri: http://localhost:7001/eureka: client:  serviceUrl:defaultZone: http://localhost:8761/eureka/ 

上面配置config属性的规则,以及前面我们直接用 http://localhost:7001/config-client/default/master 访问配置的规则

URL与配置文件的映射关系

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

application是config-client-dev.properties文件中的config-client值,profile是一个active的profile,一般用来表示环境信息,label是一个可选的标签,一般用来表示目录名称。
比如,我在Github上的文件名是config-client.properties,在Github上都是default环境,默认为master分支。所以就是/config-client/default/master

四、新建springcloud-config-server 的client模块:

我用之前写过的springcloud-feign-client模块,在FeignController类里增加一个/testconfig方法充当Client端,springcloud-feign-client模块内容参考:一起来学Spring Cloud | 第四章:服务消费者 ( Feign )

1. 在pom.xml文件中,增加上面新建的模块的依赖包,这样我们就能使用springcloud-config模块中的eureka和config配置

<dependency>
<groupId>com.haly</groupId>
<artifactId>springcloud-config</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>

2. 在FeignController类中增加一个测试方法

@Value("${configword}")
String configword;

@GetMapping(value = "/testconfig")public String test
源文地址:https://www.guoxiongfei.cn/cntech/18440.html