SpringCloud(9)-config
SpringCloud(9)-config分布式配置
概述
分布式系统面临的配置文件的问题
微服务意味着要将单体应用中的业务拆分成一个个子服务 ,每个服务的粒度相对较小,因此系统中会出现大量的服
务,由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、 动态的配置管理设施是必不可少的。
SpringCloud提供了ConfigServer来解决这个问题:我们每一个微服务自己带着一个application.yml, 那上百的配置文件要修改起来,岂不是要发疯!

Spring Cloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环节提供了一个中心化的外部配置。
Spring Cloud Config 分为服务端和客户端两部分:
- 服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密,解密信息等访问接口。
- 客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获
取和加载配置信息。配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理。并且可以通过git客户端工具来方便的管理和访问配置内容。
SpringCloud config服务端(分布式配置中心)能干嘛
- 集中管理配置文件
- 不同环境,不同配置,动态化的配置更新,分环境部署,比如/dev /test/ /prod /beta /release
- 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统-拉取配置自
己的信息。 - 当配置发生变动时,服务不需要重启,即可感知到配置的变化,并应用新的配置。
- 将配置信息以REST接口的形式暴露。
Git准备工作
- 在Gitee上新建springcloud仓库
- 克隆springcloud仓库到本地
- 编写application.yml文件
spring:
profiles:
active: dev
---
spring:
profiles: dev
application:
name: spring-cloud-config-dev
---
spring:
profiles: test
application:
name: spring-cloud-config-test
- 将application.yml文件发送到Gitee

配置SpringCloud config服务端
- 创建子Maven项目:spring-config-server-9527
- 添加spring-cloud-config-server依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>
- 编写application.yml
server:
port: 9527
spring:
application:
name: spring-config-server
cloud:
config:
server:
git:
uri: https://gitee.com/yinrzsoft/springcloud.git
- 修改主启动类:
@SpringBootApplication
@EnableConfigServer
public class Config_server_9527 {
public static void main(String[] args) {
SpringApplication.run(Config_server_9527.class,args);
}
}
- 访问http://localhost:9527/application-dev.yml,成功加载对应的配置:

配置SpringCloud config客户端
- 编写一个config-client.yml,并上传至Git仓库。
spring:
profiles:
active: dev
---
server:
port: 8888
spring:
profiles: dev
application:
name: springcloud-provider-dept
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:7001/eureka/,http://127.0.0.1:7002/eureka/,http://127.0.0.1:7003/eureka/
---
server:
port: 7777
spring:
profiles: test
application:
name: springcloud-provider-dept
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:7001/eureka/,http://127.0.0.1:7002/eureka/,http://127.0.0.1:7003/eureka/

-
创建子Maven项目:spring-config-client-9528。
-
添加spring-cloud-starter-config依赖:
<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>
- 在resources下编写application.yml:
#用户级别的配置
spring:
application:
name: spring-config-client-9528
与bootstrap.yml:
#系统级别配置
spring:
cloud:
config:
uri: http://localhost:9527
name: config-client #需要读取的资源名(不加后缀)
profile: dev #需要dev的环境
label: master #哪个分支
- 编写一个ConfigClientController:
@RestController
public class ConfigClientController {
@Value("${spring.application.name}")
private String applicationName;
@Value("${eureka.client.service-url.defaultZone}")
private String eurekaServer;
@Value("${server.port}")
private String port;
@RequestMapping("/config")
public String getConfig(){
return "applicationName:"+applicationName+";eurekaServer:"+eurekaServer+";port:"+port;
}
}
- 编写主启动类Config_client:
@SpringBootApplication
public class Config_client {
public static void main(String[] args) {
SpringApplication.run(Config_client.class,args);
}
}
- 因读取的是dev环境的配置,所以端口号为8888,访问http://localhost:8888/config,测试:


浙公网安备 33010602011771号