简介 SpringCloudConfig 就是我们通常意义上的配置中心, 把应用原本放在本地文件的配置抽取出来放在中心服务器, 从而能够提供更好的管理, 发布能力. SpringCloudConfig 分服务端和客户端, 服务端负责将 git(svn)中存储的配置文件发布成 REST 接口, 客户端可以从服务端 REST 接口获取配置. 但客户端并不能主动感知到配置的变化, 从而主动去获取新的配置, 这需要每个客户端通过 POST 方法触发各自的 / refresh.
SpringCloudBus 通过一个轻量级消息代理连接分布式系统的节点. 这可以用于广播状态更改 (如配置更改) 或其他管理指令. SpringCloudBus 提供了通过 POST 方法访问的 endpoint/bus/refresh, 这个接口通常由 git 的钩子功能调用, 用以通知各个 SpringCloudConfig 的客户端去服务端更新配置. 在 spring cloud config 组件中, 分两个角色, 一是 config server, 二是 config client.
构建 Config Server 创建一个 spring-boot 项目, 取名为 config-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">
- <modelVersion>4.0.0</modelVersion>
- <groupId>cn.easted</groupId>
- <artifactId>com</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>jar</packaging>
- <name>com</name>
- <description>Demo project for Spring Boot</description>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.5.6.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>
- <spring-cloud.version>Dalston.SR3</spring-cloud.version>
- </properties>
- <dependencies>
- <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>
- <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>${spring-cloud.version}</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>
在程序的入口 Application 类加上 @EnableConfigServer 注解开启配置服务器的功能, 代码如下:
- @SpringBootApplication
- @EnableConfigServer
- public class ConfigServerApplication {
- public static void main(String[] args) {
- SpringApplication.run(ConfigServerApplication.class, args);
- }
- }
需要在程序的配置文件 application.yml 文件配置以下:
- spring.application.name=config-server
- server.port=8888
- spring.cloud.config.server.git.uri=https://github.com/forezp/SpringcloudConfig/
- spring.cloud.config.server.git.searchPaths=respo
- spring.cloud.config.label=master
- spring.cloud.config.server.git.username=
- spring.cloud.config.server.git.password=
spring.cloud.config.server.git.uri: 配置 git 仓库地址
spring.cloud.config.server.git.searchPaths: 配置仓库路径
spring.cloud.config.label: 配置仓库的分支
spring.cloud.config.server.git.username: 访问 git 仓库的用户名
spring.cloud.config.server.git.password: 访问 git 仓库的用户密码
远程仓库 https://github.com/shaweiwei/myspringcloudconfig/ 中有个文件 config-client-dev.properties 文件中有一个属性:
fooo=version 启动程序: 访问 http://localhost:8888/fooo/dev
http 请求地址和资源文件映射如下:
- /{application}/{profile}[/{label}]
- /{application}-{profile}.yml
- /{label}/{application}-{profile}.yml
- /{application}-{profile}.properties
- /{label}/{application}-{profile}.properties
构建一个 config client 重新创建一个 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>com.forezp</groupId>
- <artifactId>sc-f-chapter6</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- </parent>
- <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>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
- </project>
其配置文件 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
spring.cloud.config.label 指明远程仓库的分支
spring.cloud.config.profile
dev 开发环境配置文件
test 测试环境
pro 正式环境
spring.cloud.config.uri= http://localhost:8888/ 指明配置服务中心的网址.
程序的入口类, 写一个 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;
- }
- }
打开网址访问: http://localhost:8881/hi , 网页显示: version 欢迎大家一起学习研究相关技术愿意了解源码的朋友直接求求交流分享技术: 2147775633
这就说明, config-client 从 config-server 获取了 foo 的属性, 而 config-server 是从 git 仓库读取的. 如图:
来源: https://yq.aliyun.com/articles/635138