关于Spring Cloud系列我们其实讲解了很多,但是这里我们介绍一下Spring Cloud Config,它是一个解决分布式系统的配置管理方案,他包含了Client 和 Server 两个部分,server提供配置文件的存储,以接口的方式将配置文件内容提供出去,Client通过接口获取相关数据,并依据数据初始化自己的应用,Spring Cloud 使用git或者svn存放配置文件,默认情况下使用git。
我们第一步,在github上创建一个文件夹Springcloud-config用来存放配置文件,我们可以创建三配置文件,分别如下:
//开发环境
springcloud-config-dev.properties
//测试环境
springcloud-config-test.properties
//生产环境
springcloud-config-pro.properties
之后我们为每个配置文件都写一个springcloud.miaow,属性值分别是,你好,miaow-dev/test/pro。
springcloud:
miaow: hello,miaow-dev
springcloud:
miaow: hello,miaow-test
springcloud:
miaow: hello,miaow-pro
这个是我们正常的开发逻辑,但是为了不一样,我采用我自己的方式进行,如下图所示我在gitee上进行
server端
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">
<parent>
<artifactId>springCloud</artifactId>
<groupId>com.miaow</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-cloud-config-git</artifactId>
<name>spring-cloud-config-git</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.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
配置相关文件Application.yml
server:
port: 3421
spring:
application:
name: spring-cloud-config-server
cloud:
config:
server:
git:
uri: https://github.com/ # git仓库的地址
search-paths: /**/springcloud-config-server # git仓库地址下的相对地址,可以配置多个,用,分割。
username: #Git仓库用户名
password: #Git仓库密码
启动类:
@EnableConfigServer
@SpringBootApplication
public class GitApplication
{
public static void main( String[] args )
{
SpringApplication.run(GitApplication.class);
}
}
客户端Client
<?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">
<parent>
<artifactId>springCloud</artifactId>
<groupId>com.miaow</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-cloud-config-git</artifactId>
<name>spring-cloud-config-git</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.8</maven.compiler.source>
<maven.compiler.target>1.8</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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
配置文件Application.yml
注意这个是我们作为客户端的配置文件,可以进行多个添加,我们根据Spring Boot解析配置文件的先后顺序分别创建两个文件:
application.yml和bootstrap.properties。
application
server:
port: 4322
spring:
application:
name: spring-cloud-config-client
bootstrap
spring.cloud.config.name=springcloud-config # 如果以我的方式,springcloud-zuul-dev。
spring.cloud.config.profile=dev
spring.cloud.config.uri=http://localhost:8080/
spring.cloud.config.label=master
spring.application.name:对应{application}部分
spring.cloud.config.profile:对应{profile}部分
spring.cloud.config.label:对应git的分支。如果配置中心使用的是本地存储,则该参数无用
spring.cloud.config.uri:配置中心的具体地址
spring.cloud.config.discovery.service-id:指定配置中心的service-id,便于扩展为高可用配置集群。
启动类
@SpringBootApplication
public class ClientApplication {
public static void main(String[] args) {
SpringApplication.run(ClientApplication.class, args);
}
}
创建一个控制层
@RestController
public class HelloController {
@Value("${springcloud.miaow}")
private String hello;
@RequestMapping("/hello")
public String from() {
return this.hello;
}
}
之后我们启动项目并访问:http://localhost:4322/hello
如果返回:hello,miaow-dev,,说明已经正确的从server端获取到了参数。到此一个完整的服务端提供配置服务,客户端获取配置参数的例子就完成了。
将配置文件上传到GitHub仓库中,按照以下格式命名
{application}-{profile}.properties
结束
使用GitHub作为配置中心的好处如下:
- 集中管理配置文件:将所有应用程序的配置文件存储在一个地方,方便管理和维护。
- 动态刷新配置:当配置文件发生变化时,Spring Cloud应用程序可以自动获取最新的配置,无需重启应用程序。
- 安全性:GitHub提供了访问控制和身份验证功能,可以保证配置文件的安全性。
- 可扩展性:可以使用Git的分支和标签功能,为不同的环境和版本管理不同的配置文件。
- 可视化管理:可以使用GitHub的Web界面,方便地查看和编辑配置文件。