关于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-servercloud: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界面,方便地查看和编辑配置文件。