commons 工程
commons 工程 - POM 文件
<?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>
<!-- 三坐标 -->
<groupId>com.zwc</groupId>
<artifactId>springcloud-config-git-commons</artifactId>
<version>1.0</version>
<!-- 工程名称和描述 -->
<name>springcloud-config-git-commons</name>
<description>ZFX代理申请www.fx61.com/brokerlist/zfx.html公用工程</description>
<!-- 打包方式 -->
<packaging>jar</packaging>
<!-- 在 properties下声明相应的版本信息,然后在dependency下引用的时候用 ${} 就可以引入该版本jar包了 -->
<properties>
<!-- 编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- jdk -->
<java.version>1.8</java.version>
<!-- SpringBoot -->
<platform-bom.version>Cairo-SR3</platform-bom.version>
<!-- SpringCloud -->
<spring-cloud-dependencies.version>Finchley.RELEASE</spring-cloud-dependencies.version>
</properties>
<!-- 加入依赖 -->
<dependencies>
</dependencies>
<!-- 依赖 jar 包版本管理的管理器 -->
<!-- 如果 dependencies 里的 dependency 自己没有声明 version 元素,那么 maven 就此处来找版本声明。 -->
<!-- 如果有,就会继承它;如果没有就会报错,告诉你没有版本信息 -->
<!-- 优先级:如果 dependencies 里的 dependency 已经声明了版本信息,就不会生效此处的版本信息了 -->
<dependencyManagement>
<dependencies>
<!-- SpringBoot -->
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>${platform-bom.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SpringCloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud-dependencies.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>
配置一些共用依赖
commons 工程 - 项目结构
配置文件
? 创建一个 Git 库,里面存放配置文件,文件夹名称为:config-repo;这里模拟不同的环境,所以分别构建了
??dev(开发)、uat(测试)以及?online(线上)三种不同的配置文件;此文件夹存在此项目的根目录中
- springcloud-config-git
? - config-repo
? ? -?system-dev.properties
? ? -?system-online.properties
? ? -?system-uat.properties- springcloud-config-git-commons
- springcloud-config-git-service
service 工程
? ① 此工程下有两个模块:一个 server,一个 client
server(获取远程的配置信息)
server?- POM 文件
<?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.zwc</groupId>
<artifactId>springcloud-config-git-service</artifactId>
<version>1.0</version>
</parent>
<!-- 三坐标 -->
<groupId>com.zwc</groupId>
<artifactId>springcloud-config-git-server-service</artifactId>
<version>1.0</version>
<!-- 工程名称描述 -->
<name>springcloud-config-git-server-service</name>
<description>config server</description>
<!-- 打包方式 -->
<packaging>jar</packaging>
<!-- 在 properties下声明相应的版本信息,然后在dependency下引用的时候用 ${} 就可以引入该版本jar包了 -->
<properties>
</properties>
<!-- 加入依赖 -->
<dependencies>
<!-- commons工程 依赖 -->
<dependency>
<groupId>com.zwc</groupId>
<artifactId>springcloud-config-git-commons</artifactId>
<version>1.0</version>
</dependency>
<!-- config server 依赖 -->
<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>
主要加入?spring-cloud-config-server?依赖
server?- application.yml?配置文件
端口
server:
port: 8000
spring:
application:
应用名称
name: config-git-server
cloud:
config:
server:
git:
仓库地址
对应 {label} 部分,即 Git 的分支
label: master
仓库文件夹名称,多个以逗号分隔
search-paths: springcloud-config-git/config-repo
git 仓库用户名(公开库可以不用填写)
username:
git 仓库密码(公开库可以不用填写)
password:
注意这里 uri 只能写到仓库名
如果配置文件在仓库中多层目录下,那么?search-paths 就从根目录开始写起
server?- 启动类
package com.zwc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;br/>@SpringBootApplication
@EnableConfigServer
public class SpringcloudConfigGitServerServiceApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudConfigGitServerServiceApplication.class, args);
}
}
添加[email protected]ableConfigServer 注解表示开启配置中心
实现原理
1、ConfigServer(配置中心服务端)从远端git拉取配置文件并在本地git一份,ConfigClient(微服务)从ConfigServer端获取自己对应 配置文件;
2、当远端git仓库配置文件发生改变,ConfigServer如何通知到ConfigClient端,即ConfigClient如何感知到配置发生更新?
Spring Cloud Bus会向外提供一个http接口,即图中的/bus/refresh。我们将这个接口配置到远程的git的webhook上,当git上的文件内容发生变动时,就会自动调用/bus-refresh接口。Bus就会通知config-server,config-server会发布更新消息到消息总线的消息队列中,其他服务订阅到该消息就会信息刷新,从而实现整个微服务进行自动刷新。
原文地址:https://blog.51cto.com/14511863/2436253