请选择 进入手机版 | 继续访问电脑版
本站特色:极好的技术研究氛围!所有技术交流,必有回复!

疯狂Java联盟

 找回密码
 加入联盟
查看: 262|回复: 1

SpringCloud之分布式配置中心(六)

[复制链接]
发表于 2018-9-5 17:20:53 | 显示全部楼层 |阅读模式
简介

SpringCloudConfig就是我们通常意义上的配置中心,把应用原本放在本地文件的配置抽取出来放在中心服务器,从而能够提供更好的管理、发布能力。SpringCloudConfig分服务端和客户端,服务端负责将git(svn)中存储的配置文件发布成REST接口,客户端可以从服务端REST接口获取配置。但客户端并不能主动感知到配置的变化,从而主动去获取新的配置,这需要每个客户端通过POST方法触发各自的/refresh。

SpringCloudBus通过一个轻量级消息代理连接分布式系统的节点。这可以用于广播状态更改(如配置更改)或其他管理指令。SpringCloudBus提供了通过POST方法访问的endpoint/bus/refresh,这个接口通常由git的钩子功能调用,用以通知各个SpringCloudConfig的客户端去服务端更新配置。在spring cloud config 组件中,分两个角色,一是config server,二是config client。

构建Config Server

创建一个spring-boot项目,取名为config-server,其pom.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4.     <modelVersion>4.0.0</modelVersion>

  5.     <groupId>cn.easted</groupId>
  6.     <artifactId>com</artifactId>
  7.     <version>0.0.1-SNAPSHOT</version>
  8.     <packaging>jar</packaging>

  9.     <name>com</name>
  10.     <description>Demo project for Spring Boot</description>

  11.     <parent>
  12.         <groupId>org.springframework.boot</groupId>
  13.         <artifactId>spring-boot-starter-parent</artifactId>
  14.         <version>1.5.6.RELEASE</version>
  15.         <relativePath/> <!-- lookup parent from repository -->
  16.     </parent>

  17.     <properties>
  18.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  19.         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  20.         <java.version>1.8</java.version>
  21.         <spring-cloud.version>Dalston.SR3</spring-cloud.version>
  22.     </properties>

  23.     <dependencies>
  24.         <dependency>
  25.             <groupId>org.springframework.cloud</groupId>
  26.             <artifactId>spring-cloud-config-server</artifactId>
  27.         </dependency>

  28.         <dependency>
  29.             <groupId>org.springframework.boot</groupId>
  30.             <artifactId>spring-boot-starter-test</artifactId>
  31.             <scope>test</scope>
  32.         </dependency>

  33.         <dependency>
  34.             <groupId>org.springframework.cloud</groupId>
  35.             <artifactId>spring-cloud-starter-eureka</artifactId>
  36.         </dependency>
  37.     </dependencies>

  38.     <dependencyManagement>
  39.         <dependencies>
  40.             <dependency>
  41.                 <groupId>org.springframework.cloud</groupId>
  42.                 <artifactId>spring-cloud-dependencies</artifactId>
  43.                 <version>${spring-cloud.version}</version>
  44.                 <type>pom</type>
  45.                 <scope>import</scope>
  46.             </dependency>
  47.         </dependencies>
  48.     </dependencyManagement>

  49.     <build>
  50.         <plugins>
  51.             <plugin>
  52.                 <groupId>org.springframework.boot</groupId>
  53.                 <artifactId>spring-boot-maven-plugin</artifactId>
  54.             </plugin>
  55.         </plugins>
  56.     </build>
  57.      <repositories>
  58.         <repository>
  59.             <id>spring-milestones</id>
  60.             <name>Spring Milestones</name>
  61.             <url>https://repo.spring.io/milestone</url>
  62.             <snapshots>
  63.                 <enabled>false</enabled>
  64.             </snapshots>
  65.         </repository>
  66.     </repositories>
  67. </project>
复制代码

在程序的入口Application类加上@EnableConfigServer注解开启配置服务器的功能,代码如下:


  1. @SpringBootApplication
  2. @EnableConfigServer
  3. public class ConfigServerApplication {

  4.     public static void main(String[] args) {
  5.         SpringApplication.run(ConfigServerApplication.class, args);
  6.     }
  7. }
复制代码

需要在程序的配置文件application.yml文件配置以下:


  1. spring.application.name=config-server
  2. server.port=8888

  3. spring.cloud.config.server.git.uri=https://github.com/forezp/SpringcloudConfig/
  4. spring.cloud.config.server.git.searchPaths=respo
  5. spring.cloud.config.label=master
  6. spring.cloud.config.server.git.username=
  7. spring.cloud.config.server.git.password=
复制代码

spring.cloud.config.server.git.uri:配置git仓库地址

spring.cloud.config.server.git.searchPaths:配置仓库路径

spring.cloud.config.label:配置仓库的分支

spring.cloud.config.server.git.username:访问git仓库的用户名

spring.cloud.config.server.git.password:访问git仓库的用户密码

远程仓库https://github.com/shaweiwei/myspringcloudconfig/ 中有个文件config-client-dev.properties文件中有一个属性:

  1. fooo=version
复制代码

启动程序:访问http://localhost:8888/fooo/dev

http请求地址和资源文件映射如下:

/{application}/{profile}[/{label}]

/{application}-{profile}.yml

/{label}/{application}-{profile}.yml

/{application}-{profile}.properties

/{label}/{application}-{profile}.properties

构建一个config client

重新创建一个springboot项目,取名为config-client,其pom文件:


  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4.     <modelVersion>4.0.0</modelVersion>

  5.     <groupId>com.forezp</groupId>
  6.     <artifactId>config-client</artifactId>
  7.     <version>0.0.1-SNAPSHOT</version>
  8.     <packaging>jar</packaging>

  9.     <name>config-client</name>
  10.     <description>Demo project for Spring Boot</description>

  11.     <parent>
  12.         <groupId>com.forezp</groupId>
  13.         <artifactId>sc-f-chapter6</artifactId>
  14.         <version>0.0.1-SNAPSHOT</version>
  15.     </parent>

  16.     <dependencies>
  17.         <dependency>
  18.             <groupId>org.springframework.boot</groupId>
  19.             <artifactId>spring-boot-starter-web</artifactId>
  20.         </dependency>
  21.         <dependency>
  22.             <groupId>org.springframework.cloud</groupId>
  23.             <artifactId>spring-cloud-starter-config</artifactId>
  24.         </dependency>
  25.     </dependencies>

  26.     <build>
  27.         <plugins>
  28.             <plugin>
  29.                 <groupId>org.springframework.boot</groupId>
  30.                 <artifactId>spring-boot-maven-plugin</artifactId>
  31.             </plugin>
  32.         </plugins>
  33.     </build>


  34. </project>
复制代码

其配置文件bootstrap.properties:


  1. spring.application.name=config-client
  2. spring.cloud.config.label=master
  3. spring.cloud.config.profile=dev
  4. spring.cloud.config.uri= http://localhost:8888/
  5. server.port=8881
复制代码

spring.cloud.config.label 指明远程仓库的分支

spring.cloud.config.profile

dev开发环境配置文件

test测试环境

pro正式环境

spring.cloud.config.uri= http://localhost:8888/ 指明配置服务中心的网址。

程序的入口类,写一个API接口“/hi”,返回从配置中心读取的foo变量的值,代码如下:


  1. @SpringBootApplication
  2. @RestController
  3. public class ConfigClientApplication {

  4.     public static void main(String[] args) {
  5.         SpringApplication.run(ConfigClientApplication.class, args);
  6.     }

  7.     @Value("${foo}")
  8.     String foo;
  9.     @RequestMapping(value = "/hi")
  10.     public String hi(){
  11.         return foo;
  12.     }
  13. }
复制代码

打开网址访问:http://localhost:8881/hi,网页显示: version 欢迎大家一起学习研究相关技术愿意了解源码的朋友直接求求交流分享技术:2147775633

这就说明,config-client从config-server获取了foo的属性,而config-server是从git仓库读取的。如图:

六.png


 楼主| 发表于 2018-9-5 17:23:24 | 显示全部楼层
喜欢关注哦~~
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

小黑屋|手机版|Archiver|疯狂Java联盟 ( 粤ICP备11094030号 )

GMT+8, 2018-11-21 12:06 , Processed in 0.143232 second(s), 7 queries , File On.

快速回复 返回顶部 返回列表