随着线上项目变的日益庞大,每个项目都散落着各种配置文件,如果采用分布式的开发模式,需要的配置文件随着服务增加而不断增多。某一个基础服务信息变更,都会引起一系列的更新和重启,运维苦不堪言也容易出错。配置中心便是解决此类问题的灵丹妙药。
市面上开源的配置中心有很多,bat每家都出过,360的qconf、淘宝的diamond、百度的disconf都是解决这类问题。国外也有很多开源的配置中心apache的apache commons configuration、owner、cfg4j等等。这些开源的软件以及解决方案都很优秀,但是我最钟爱的却是spring cloud config,因为它功能全面强大,可以无缝的和spring体系相结合,够方便够简单颜值高我喜欢。
在我们了解spring cloud config之前,我可以想想一个配置中心提供的核心功能应该有什么
提供服务端和客户端支持
集中管理各环境的配置文件
配置文件修改之后,可以快速的生效
可以进行版本管理
支持大的并发查询
支持各种语言
spring cloud config可以完美的支持以上所有的需求。
spring cloud config项目是一个解决分布式系统的配置管理方案。它包含了client和server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。spring cloud使用git或svn存放配置文件,默认情况下使用git,我们先以git为例做一套示例。
首先在github上面创建了一个文件夹config-repo用来存放配置文件,为了模拟生产环境,我们创建以下三个配置文件:
每个配置文件中都写一个属性neo.hello,属性值分别是 hello im dev/test/pro 。下面我们开始配置server端
只需要加入spring-cloud-config-server包引用既可。
启动类添加<code>@enableconfigserver</code>,激活对配置中心的支持
到此server端相关配置已经完成
返回信息如下:
上述的返回的信息包含了配置文件的位置、版本、配置文件的名称以及配置文件中的具体内容,说明server端已经成功获取了git仓库的配置信息。
返回:<code>neo.hello: hello im dev</code>
仓库中的配置文件会被转换成web接口,访问可以参照以下的规则:
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
以neo-config-dev.properties为例子,它的application是neo-config,profile是dev。client会根据填写的参数来选择读取对应的配置。
主要展示如何在业务项目中去获取server端的配置信息
引入spring-boot-starter-web包方便web测试
需要配置两个配置文件,application.properties和bootstrap.properties
application.properties如下:
bootstrap.properties如下:
spring.application.name:对应{application}部分
spring.cloud.config.profile:对应{profile}部分
spring.cloud.config.label:对应git的分支。如果配置中心使用的是本地存储,则该参数无用
spring.cloud.config.uri:配置中心的具体地址
spring.cloud.config.discovery.service-id:指定配置中心的service-id,便于扩展为高可用配置集群。
特别注意:上面这些与spring-cloud相关的属性必须配置在bootstrap.properties中,config部分内容才能被正确加载。因为config的相关配置会先于application.properties,而bootstrap.properties的加载也是先于application.properties。
启动类只需要<code>@springbootapplication</code>注解就可以
使用<code>@value</code>注解来获取server端参数的值
<a href="https://github.com/ityouknow/spring-cloud-starter">示例代码</a>
作者:纯洁的微笑
版权归作者所有,转载请注明出处