简介
对于传统的单体应用,通常是使用配置文件来管理所有的配置,但是在微服务架构中,会存在很多的微服务,如果每一个微服务都维护自己的配置,显然是非常的麻烦且不灵活,维护成本会非常高
使用Spring Cloud Config可以实现一下功能
- 集中管理配置
- 不同环境,不同配置
- 运行时期动态调整。并且在修改配置时不会停止微服务
- 配置修改后自动更新
Spring Cloud Config 为分布式系统外部化配置提供了服务器端和客户端的支持,它包括Config Server 和 Config Client 两部分。默认使用 Git 存储配置内容(也可以使用Subversion、本地文件系统或 Vault 存储配置)。Config Client 会在微服务启动时,请求 Config Server 以获取所需要的配置属性,并且缓存在本地以提高性能。
实践
Config Server
准备Git仓库
这里需要一个Git仓库来存储配置文件,我是使用GitHub来做仓库的。需要在仓库的根目录下放置几个测试用的配置文件
文件:
microservice-foo.properties
microservice-foo-dev.properties
microservice-foo-test.properties
microservice-foo-production.properties
内容分别是:
profile=default-1.0
profile=dev-1.0
profile=test-1.0
profile=production-1.0
然后新建分支dev ,并且将 microservice-foo-dev.properties 文件中的内容修改为 profile=dev-2.0
编写代码
集成:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
启动文件添加@EnableConfigServer
标签
配置文件:
spring.application.name=microservice-config-server
# 这个uri使用可以clone的路径
spring.cloud.config.server.git.uri=https://github.com/wkkdhr/Dome1.git
# github的账号密码
spring.cloud.config.server.git.username=***
spring.cloud.config.server.git.password=***
启动服务之后,就可以使用 Config Service 的端点获取配置文件内容了。配置文件与端点的映射规则如下:
/{application}/{profile}/{label}
/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.yml
/{label}/{application}-{profile}.properties
占位符含义:
- {application} 表示微服务名称。microservice-foo-dev.properties 中 microservice-foo 就是微服务名称
- {profile} 表示微服务名后面的dev、test等。microservice-foo-dev.properties 中 dev 就是{profile}
- {label} 表示Git仓库分支,默认是master,可省略
访问 http://localhost:8080/microservice-foo/dev 得到以下结果:
可以看到相关的配置详情信息。
访问 http://localhost:8080/microservice-foo-dev.properties
可以直接获取配置文件内容:
需要说明一下,因为是使用GitHub来作为Git仓库,所以访问有可能会出现失败的风险
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。