在分布式系统中由于服务数巨多,为了方便服务配置文件统一管理,实时更新,所以需要一个分布式配置中心组件。在Spring Cloud中有Spring Cloud Config组件,它支持配置服务放在配置服务的内存中,也支持放在运程仓库中。在Spring Cloud Config 组件中,有两个角色,一个是ConfigServer 一个是ConfigClient。Spring Cloud Config实现了与Spring的无缝集成,支持Spring 里面的Environment和PropertySource的接口,对于已有的Spring的迁移成本非常低,在配置获取的接口上完全一致。
Spring Cloud Config:把应用原本放在本地的配置文件抽取出来放在中心服务器,从而获得更好的管理,发布能力
服务端:git/svn中存储的配置文件发布成REST接口
客户端:从服务端的REST接口获取配置,不能主动感知到配置的变换(更新),需要客户端的POST触发/refresh
服务端配置:
- 添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
- 开启服务注册:@EnableConfigServer注解开启Spring Cloud Config服务端
@EnableConfigServer @SpringBootApplication public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); } }
- 配置文件
spring.application.name=config-server server.port=8888 spring.cloud.config.label=master spring.cloud.config.server.git.uri=https://github.com/souyunku/spring-cloud-config.git spring.cloud.config.server.git.search-paths=spring-cloud-config #spring.cloud.config.server.git.username=your username #spring.cloud.config.server.git.password=your password
spring-cloud-config-server-git-uri:配置git仓库地址
spring-cloud-config-server-git-searchPaths:配置仓库路径
spring-cloud-config-label:配置仓库分支
HTTP请求资源和地址映射如下:
- /{application}/{profile}[/{label}]
- /{application}--{profile}.yml
- /{label}/{application}--{profile}.yml
- /{application}--{profile}.properties
- /{label}/{application}--{profile}.properties
- 测试服务
证明配置服务中心可以从远程仓库获取配置信息
客户端配置:
- 添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
- 开启服务注册
通过@value注解获取服务端content的值
@RestController @SpringBootApplication public class ConfigClientApplication { @Value("${content}") String content; @RequestMapping("/") public String home() { return "content:" + content; } public static void main(String[] args) { SpringApplication.run(ConfigClientApplication.class, args); } }
- 配置文件
spring.application.name=config-client spring.cloud.config.label=master spring.cloud.config.profile=dev spring.cloud.config.uri=http://localhost:8888/ server.port=8088
spring-cloud-profile:
dev开发配置文件
test测试环境
pro正式环境
spring-cloud-config-uri:配置服务中心网址
- 测试服务:访问http://localhost:8088/
参考:https://www.w3cschool.cn/spring_cloud/spring_cloud-vca32ixm.html
附上原作者源码地址:https://github.com/souyunku/spring-cloud-examples/tree/master/spring-cloud-config