配置中心Config
- 1. 概述
- 2. 分布式配置中心
-
- 2.1 新建工程spring-config-server
- 2.2 spring-config-server工程pom引入jar
- 2.3 spring-config-server工程启动类
- 2.4 spring-config-server工程配置文件application
- 2.5 新建工程spring-config-client
- 2.6 spring-config-client工程pom引入jar
- 2.7 spring-config-client工程启动类
- 2.8 spring-config-client工程配置文件application
- 2.9 调用测试
- 3. 高可用分布式配置中心
-
- 3.1 建立服务注册中心
- 3.2 spring-config-server工程修改
-
- 引入pom
- 配置文件application
- 启动类
- 3.3 config-client工程修改
-
- 引入pom
- 配置文件application
- 启动类
- 调用测试
1. 概述
在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。
2. 分布式配置中心
2.1 新建工程spring-config-server
新建一个maven的module工程,名称为spring-config-server,父亲pom为springcloud。需要引入config-server、starter-web的jar包。
2.2 spring-config-server工程pom引入jar
<?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>
<artifactId>spring-cloud</artifactId>
<groupId>com.lin</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.lin</groupId>
<artifactId>spring-config-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-config-server</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</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>
<pluginManagement><!-- lock down plugins versions to avoid using Maven
defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
2.3 spring-config-server工程启动类
启动类引入@EnableConfigServer注解,代码如下:
package org.spring.config.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
2.4 spring-config-server工程配置文件application
新建一个resources文件夹,建立application.properties文件,内容如下:
spring.application.name=config-server
server.port=8888
#git地址
spring.cloud.config.server.git.uri=https://github.com/forezp/SpringcloudConfig/
#git文件路径
spring.cloud.config.server.git.searchPaths=respo
#git的分支
spring.cloud.config.label=master
#git账号
spring.cloud.config.server.git.username=
#git密码
spring.cloud.config.server.git.password=
2.5 新建工程spring-config-client
新建一个maven的module工程,名称为spring-config-client,父亲pom为springcloud。需要引入config-server、starter-web的jar包。
2.6 spring-config-client工程pom引入jar
<?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>
<artifactId>spring-cloud</artifactId>
<groupId>com.lin</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.lin</groupId>
<artifactId>spring-config-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-config-client</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven
defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
2.7 spring-config-client工程启动类
新建启动类,引入@RestController,开放接口getFoo给浏览器调用:
package org.spring.config.client;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
@Value("${foo}")
String foo;
@RequestMapping(value = "/getFoo")
public String getFoo(){
return foo;
}
}
2.8 spring-config-client工程配置文件application
新建一个resources文件夹,建立application.properties文件,其中spring.application.name将于git上面的配置文件名称对应(本例叫config-client,对应git上面文件名称为config-client-dev.properties),内容如下:
spring.application.name=config-client
spring.cloud.config.label=master
spring.cloud.config.profile=dev
spring.cloud.config.uri= http://localhost:8888/
server.port=8881
2.9 调用测试
打开浏览器,输入http://localhost:8881/getFoo
可以获取如下信息:
foo version 2
3. 高可用分布式配置中心
上一章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用,架构图如下:
3.1 建立服务注册中心
根据章节《服务注册中心Eureka》步骤建立一个服务注册中心,本例利用的是之前建立的服务注册中心。
3.2 spring-config-server工程修改
本例中,利用章节《分布式配置中心》里面建立的工程spring-config-server上面进行修改。
引入pom
在pom文件中引入服务注册的客户端eureka-client的jar包:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
配置文件application
在配置文件application.properties中增加如下信息(将config-server注册到服务中心):
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
启动类
在启动类中,增加注解@EnableEurekaClient即可。
3.3 config-client工程修改
本例中,利用上一个《分布式配置中心》里面建立的工程spring-config-client上面进行修改。
引入pom
在pom文件中引入服务注册的客户端eureka-client的jar包:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
配置文件application
配置文件修改(注释掉config.uri的方式,引入注册中心,配置config的服务名),代码如下:
spring.application.name=config-client
spring.cloud.config.label=master
spring.cloud.config.profile=dev
#spring.cloud.config.uri= http://localhost:8888/
server.port=8881
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=config-server
启动类
在启动类中,增加注解@EnableEurekaClient即可。
调用测试
1) 启动eureka-server的启动类
2) 启动spring-config-server的启动类
3) 启动spring-config-client的启动类
4) 打开浏览器,输入http://localhost:8881/getFoo显示信息如下:
foo version 2
本文参考文献:https://blog.csdn.net/forezp/article/details/70148833/