要做好微服务的配置管理,则需要处理好以下几个问题:
- 在微服务架构中配置数据与服务实例不要在同一个地方,最好各自独立分开。
- 解决非侵入式配置数据的植入
- 通过对配置文件的集中式管理,可以非常方便地对微服务的配置进行统一修改和发布,并能够建立版本机制,以便后续进行配置数据的回溯。
- 保障配置服务的高可用性
Spring Cloud Config简介
SpringCloud Config核心就是配置中心,通过一个服务端和多个客户端实现配置服务。具有中心化、版本控制、支持动态更新和语言独立等特性,其优点:
- 提供配置服务器和配置客户端两种角色,便于部署和使用,使开发者可以集中管理分布式环境下的应用配置。
- 配置服务器集中对配置资源进行管理,并支持多种配置资源存储方式,如Git、SVN及文件系统。
- 通过对Git、SVN的支持,便于对配置文件进行版本管理,可以对配置文件的变更做审查。
- 应用通过简单的注解就可以实现配置的统一管理。
- Spring Cloud Config提供与Spring Boot配置类似的机制,可以非常容易地实现对应用开发环境、测试环境、灰度环境和生产环境的配置、切换和迁移等处理。
- 配置服务器可以方便地与Eureka和Consul等进行整合,快速构建一个高可用的配置服务。
- 配置服务器也可以用于其他语言开发的服务中。
![940f5f859a8200cdac662b98ef74a4a3.png](https://i-blog.csdnimg.cn/blog_migrate/21c5a22a15a05c7b775321b6f0176f71.jpeg)
Spring Cloud Config有两个角色Server和Client。
Server作为配置中心的服务端作用:
- 当配置客户端获取配置时,服务端及时从Git仓库中获取配置副本,从而保证配置数据为最新。
- 支持从yml、json、properties等文件加载配置
- 配置Eureka可实现服务发现,配置Cloud Bus可实现配置推送更新
- 默认配置存储基于Git,从而支持配置的版本管理。
Client只需要在引导配置文件中声明所使用的配置服务器地址即可。
快速启动
1、构建配置服务器
编写pom文件
![0c7b9c579b821b11022b883de4bfa8c4.png](https://i-blog.csdnimg.cn/blog_migrate/88324545b4c8c0518c1203d63aefb9a6.jpeg)
编写启动类
![dafdf38ac65476236d2de66ca9940cac.png](https://i-blog.csdnimg.cn/blog_migrate/64c49494577ea20ce6b41d0ea0e1babf.jpeg)
编写配置文件
![7ca5c0541eaab22d69e237a40519113f.png](https://i-blog.csdnimg.cn/blog_migrate/0226a9b71c430b82545f051953aeb8b5.jpeg)
2、创建应用配置文件
![403acbbfeb62a70d317590bf66ed283a.png](https://i-blog.csdnimg.cn/blog_migrate/a1c0785c226edacf8a70d78d580681af.png)
productservice.yml
![5411c44f5ab02aa0d352a75675bfb3ed.png](https://i-blog.csdnimg.cn/blog_migrate/869e8973e56501b0055e85e5fe9d528b.jpeg)
productservice-dev.yml
![00bf5f295a05ac70cf2b6d401db2bc2f.png](https://i-blog.csdnimg.cn/blog_migrate/c56fadbc67cf2072d841924784344670.png)
测试
![3432d64975276d63c0518e0cc2f41998.png](https://i-blog.csdnimg.cn/blog_migrate/bde17ed2f97b1e9ae4197c2fbcbe2046.jpeg)
3、升级微服务配置
对用户、商品微服务增加依赖项
![c92430e66d1ac7a8dbcfa973ec644841.png](https://i-blog.csdnimg.cn/blog_migrate/f85bc60b8913842f6b55d08ad9ef8461.png)
增加bootstrap.yml配置,application.yml的配置全部注释掉
![b414f25ee7053ed864c7f8dac9706170.png](https://i-blog.csdnimg.cn/blog_migrate/4e2cae2e2a3c0b4ddc0f4ed1e6d0663e.jpeg)
4、启动测试
依次启动Eureka、Config、User和Producet服务。
![dcf9a7c4cb3cbef8c583bc36f51f1218.png](https://i-blog.csdnimg.cn/blog_migrate/354f3b8993445587d0dc4f637930bfc2.png)
当我们启动ProducetService时,Config相关代码将根据bootstrap.yml所配置的服务名称和所要启动的profile向配置服务器的端点请求配置数据。配置服务器在收到请求后,根据对应的参数,从配置资源库加载相应的配置文件,然后根据这些配置文件构建数据,并传给配置客户端,最后根据获得的配置数据来构建应用上下文。
5、@Value注解
验证@Value注解获取cofig配置中心的配置属性
![e7ef417f6a1c1a1a03b24862a2cf13e8.png](https://i-blog.csdnimg.cn/blog_migrate/e898f046f4eb826dc9c0df099626919a.jpeg)
![b40b1a2422ff1e5529069fe506e3811c.png](https://i-blog.csdnimg.cn/blog_migrate/1847ea8475a558bd3f335a9252996c5e.png)
6、Spring配置加载顺序
一个Spring Boot应用,可以通过多种方式进行配置。
- 命令行参数:使用--xxx=xxx格式在启动时传递,比如--server.port=2000
- 从java:comp/env加载的JNDI属性
- Java系统属性:通过-Dxxx=xxx格式设置,优先级比上面的配置低。
- 操作系统环境变量
- RandomValuePropertySource:使用random.*属性进行配置,主要是在系统配置中需要使用随机数的地方使用,如abc.securityid=${random.value}。
- 特定应用的properties或yml配置文件:这些文件名称的格式为application-{profile}.properties或yml,通过指定使用的profile来加载。
- 应用配置文件application.properties或yml:默认加载的配置文件,通过上面的配置可以配属属性的覆盖。
- @Configuration、@PropertySource或@ConfigurationProperties所指向的配置文件,@ConfigurationProperties可以批量的将配置注入到Bean中。