一、概述
1、简介
SpringCloud Config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。官方文档地址:https://cloud.spring.io/spring-cloud-static/spring-cloud-config/2.2.2.RELEASE/reference/html/ 。
2、组成
-
服务端(分布式配置中心)
它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口。
-
客户端
通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息,配置服务器默认采用git来存储配置信息,这样有助于对配置环境进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容。
3、作用
- 集中管理配置文件;
- 不同环境不同配置,动态化的配置更新,分环境部署,如:开发环境/测试环境/发布环境;
- 运行期间可以动态调整配置,不需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置;服务不需要重启即可感知到配置的变化并应用新的配置;
- 将配置信息以REST接口的形式暴露。
二、服务端配置
1、在 gitHub 上建立一个远程仓库,用于存放配置;
2、新建一个模块,在pom中添加以下依赖;
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!-- eureka-client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</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-actuator</artifactId>
</dependency>
<!--热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
3、配置application.yml;
server:
port: 3344
spring:
application:
name: cloud-server-center #注册进Eureka服务器的名称
cloud:
config:
server:
git:
#uri: git@github.com:xhanglog/springcloud-config.git #gitHub上的仓库地址
uri: https://github.com/xhanglog/springcloud-config.git
username: xxxx
password: xxxx
search-paths: #搜索目录
- springcloud-config
label: master #读取分支
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
4、主启动类加注解 @EnableConfigServer 。
三、客户端配置
1、新建一个模块,添加以下依赖;
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!-- eureka-client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</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-actuator</artifactId>
</dependency>
<!--热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2、新建bootstrap.yml
bootstrap.yml 文件是系统级的,优先级更高。SpringCloud 会创建一个“Bootstrap Context”作为Spring应用的父上下文。初始化的时候,“Bootstrap Context”负责从外部源加载配置属性并解析配置。Bootstrap Context 和Application Context 有着不同的约定,所以新增了一个 bootstrap.yml 文件,保证 Bootstrap Context 和Application Context 配置的分离。
3、编写业务类
@Value("${config.info}")
private String configInfo;
@GetMapping("/configInfo")
public String getConfigInfo(){
return configInfo;
}
4、依次启动服务端和客户端,可以发现客户端可以获取到服务端的配置信息。
四、客户端动态刷新
当远程的配置文件修改后,config 服务端可以及时获得最新的配置,但是客户端不能,需要我们进行以下配置。
1、在客户端引入监控组件 actuator;
2、修改 bootstrap.yml 文件,添加以下内容,暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
3、当配置修改后需要手动刷新,可以通过postman发送post请求或者以下命令,刷新后客户端便可以获得最新的配置。
curl -X POST "http://localhost:3355/actuator/refresh"
案例代码地址:https://github.com/xhanglog/springcloud-learning