本文章主要用于记录自己对SpringCloud的分布式配置中心的学习。
一、为什么要使用分布式配置中心?
在我们进行微服务开发的过程中,通常一个系统会有很多服务,而没给服务又会有很多的配置文件,这样就造成,需要大量的配置文件,并且对这些配置文件的管理也是异常的麻烦,而且容易造成错误。为了方便配置文件的管理和减少配置文件修改中造成的错误,我们就可以使用SpringCloud的分布式配置中心来管理我们的配置文件。
二、配置中心的创建和使用
(1)需要创建的工程
在此,我们需要创建一个配置中心SpringCloud-config-server,然后使用自己的服务来使用配置中心的配置文件。
(2)配置中心创建
完整的maven依赖如下:
<?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.didispace</groupId>
<artifactId>config-server</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>config-server</name>
<description>Spring Cloud project</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Brixton.RELEASE</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>
程序启动的主类如下:
package com.liutao.application;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
/**
* 用于配置和启动引导
*/
@EnableConfigServer
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
针对上面的代码,我们可以看钱与之前的springBoot工程相比,多了一个@EnableConfigServer注解,这个注解的主要作用就是开启SpringCloud的config server。
配置文件application.propertis的配置如下:
#配置服务信息以及git信息
spring.application.name=spingcloud-config-server
server.port=8004
#git管理配置
spring.cloud.config.server.git.uri=https://github.com/liutao910612/SpringCloud_learn.git
spring.cloud.config.server.git.searchPaths=configCenter/springcloud_config_repo/
spring.cloud.config.server.git.username=liutao910612@126.com
spring.cloud.config.server.git.password=liut201003
上面的配置与之前的配置文件不同的主要就是多了git管理配置。
我们将配置文件集中放到git上进行管理。上面的配置的作用分别是:git地址、相应的目录、用户名、密码
为了测试配置中心的效果,我们需要创建部分配置文件放到配置中心的git仓库中。创建的文件如下:
为了演示,我们目前仅仅在配置文件中添加了一个属性,如下:
from=git-dev-1.0
根据不同的环境,修改不同的参数。
至此,配置中心就完成了,运行程序后就可以根据自己的需要使用配置中心了。
(3)使用配置中心
针对上面的配置中心,我们就可以在自己的服务块中使用配置中心来获取需要的配置文件中的配置参数了。
具体的maven依赖如下:
<?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.didispace</groupId>
<artifactId>config-client-eureka</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>config-client-eureka</name>
<description>Spring Cloud project</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<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>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Brixton.SR5</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>
bootstrap.properties配置文件如下:
spring.application.name=didispace
spring.cloud.config.profile=prod
spring.cloud.config.label=master
spring.cloud.config.uri=http://localhost:8004/
server.port=7002
针对上面的配置文件,重点就是使用配置中心的相关配置,前四项的意义分别是配置文件的名称、环境、分支、配置中心地址。
测试Controller如下:
package com.liutao.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RefreshScope
@RestController
public class TestController {
@Value("${from}")
private String from;
@RequestMapping("/from")
public String from() {
return this.from;
}
public void setFrom(String from) {
this.from = from;
}
public String getFrom() {
return from;
}
}
由上面可以看见,我们需要使用@RefreshScope和@Value注解来使用配置文件中的属性。
三、使用本地文件系统
如果我们不想要从远程仓库中使用配置文件,想要使用本地文件系统中的配置文件怎么办呢?
我们仅仅需要做的就是在我们的properties文件中添加如下配置即可:
spring.cloud.config.server.native.search-locations=E:/PROJECT/springcloud_lean/configCenter/springcloud_config_repo_local
spring.profiles.active=native
启动应用程序,就可以进行相应的测试了。
详细代码请参考gitHub地址:config server