一、简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在 Spring Cloud 中,有分布式配置中心组件 spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程 Git 仓库中。在 spring cloud config 组件中,分两个角色,一是 config server,二是 config client。 二、构建 Config Server 创建一个 spring-boot 项目,取名为 config-server, 其 pom.xml:
方志朋的博客 在上一篇文章讲述 zuul 的时候,已经提到过,使用配置服务来保存各个服务的配置文件。它就是 Spring Cloud Config。
远程仓库 https://github.com/forezp/SpringcloudConfig/ 中有个文件 config-client-dev.properties 文件中有一个属性:
foo = foo version 3
启动程序:访问 http://localhost:8888/foo/dev
- {"name":"foo","profiles":["dev"],"label":"master",
- "version":"792ffc77c03f4b138d28e89b576900ac5e01a44b","state":null,"propertySources":[]}
- 1
- 2
- 3
证明配置服务中心可以从远程程序获取配置信息。
http 请求地址和资源文件映射如下:
重新创建一个 springboot 项目,取名为 config-client, 其 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.forezp
- </groupId>
- <artifactId>
- config-client
- </artifactId>
- <version>
- 0.0.1-SNAPSHOT
- </version>
- <packaging>
- jar
- </packaging>
- <name>
- config-client
- </name>
- <description>
- Demo project for Spring Boot
- </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>
- <project.reporting.outputEncoding>
- UTF-8
- </project.reporting.outputEncoding>
- <java.version>
- 1.8
- </java.version>
- </properties>
- <dependencies>
- <dependency>
- <groupId>
- org.springframework.cloud
- </groupId>
- <artifactId>
- spring-cloud-starter-config
- </artifactId>
- </dependency>
- <dependency>
- <groupId>
- org.springframework.boot
- </groupId>
- <artifactId>
- spring-boot-starter-web
- </artifactId>
- </dependency>
- <dependency>
- <groupId>
- org.springframework.boot
- </groupId>
- <artifactId>
- spring-boot-starter-test
- </artifactId>
- <scope>
- test
- </scope>
- </dependency>
- </dependencies>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>
- org.springframework.cloud
- </groupId>
- <artifactId>
- spring-cloud-dependencies
- </artifactId>
- <version>
- Dalston.RC1
- </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>
- <repositories>
- <repository>
- <id>
- spring-milestones
- </id>
- <name>
- Spring Milestones
- </name>
- <url>
- https://repo.spring.io/milestone
- </url>
- <snapshots>
- <enabled>
- false
- </enabled>
- </snapshots>
- </repository>
- </repositories>
- </project>
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
- 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
- 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
- 76 77 78 79 80
其配置文件 bootstrap.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
- 1
- 2
- 3
- 4
- 5
- 6
程序的入口类,写一个 API 接口 "/hi",返回从配置中心读取的 foo 变量的值,代码如下:
- @SpringBootApplication
- @RestController
- public class ConfigClientApplication {
- public static void main(String[] args) {
- SpringApplication.run(ConfigClientApplication.class, args);
- }
- @Value("${foo}")
- String foo;
- @RequestMapping(value = "/hi")
- public String hi(){
- return foo;
- }
- }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
打开网址访问: http://localhost:8881/hi ,网页显示:
foo version 3
这就说明,config-client 从 config-server 获取了 foo 的属性,而 config-server 是从 git 仓库读取的, 如图:
本文源码下载:
https://github.com/forezp/SpringCloudLearning/tree/master/chapter6* 依照博客成功执行。
来源: http://blog.csdn.net/baiyuting_hi/article/details/78835549