这是我参与更文挑战的第 17 天,活动详情查看: 更文挑战
《配置中心 Spring Cloud Config 详解》系列文章更新,一起在技术的路上精进!本系列文章将会介绍Spring Cloud 中提供了分布式配置中心Spring Cloud Config。应用服务中除了实现系统功能的代码,还需要连接资源和其它应用,经常有很多需要在外部配置的数据去调整应用的行为,如切换不同的数据库,设置功能开关等。随着微服务的不断增加,需要系统具备可伸缩和可扩展性,除此之外就是管理相当多的服务实例的配置数据。在应用的开发阶段由各个服务自治,但是到了生产环境之后会给运维带来很大的麻烦,特别是微服务的规模比较大,配置的更新更为麻烦。为此,系统需要建立一个统一的配置管理中心。
在前面的文章,我们主要介绍了 Spring Cloud Config 客户端和服务端相关实现细节。前一篇文章介绍了 config Server 配置多个 repo 的进阶应用。本文将会介绍如何进行客户端覆写远端的配置属性以及使用 SVN 或本地文件系统作为配置仓库。
客户端覆写远端的配置属性
应用的配置源通常都是远端的Config Server服务器,默认情况下,本地的配置优先级低于远端配置仓库。如果想实现本地应用的系统变量和config文件覆盖远端仓库中的属性值,可以通过如下设置:
spring:
cloud:
config:
allowOverride: true
overrideNone: true
overrideSystemProperties: false
复制代码
- overrideNone:当 allowOverride 为 true 时,overrideNone 设置为 true,外部的配置优先级更低,而且不能覆盖任何存在的属性源。默认为 false
- allowOverride:标识 overrideSystemProperties 属性是否启用。默认为 true,设置为 false 意为禁止用户的设置
- overrideSystemProperties:用来标识外部配置是否能够覆盖系统属性,默认为 true
客户端服务通过如上配置,可以实现本地配置优先级更高,且不能被远端仓库中的配置覆盖。
使用SVN或本地文件系统作为配置仓库
我们在基础应用中使用了比较主流的 git 作为配置仓库,本文将会介绍 SVN 仓库和本地文件系统作为仓库的使用方式。
SVN 是 subversion 的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。
SVN 采用客户端/服务器体系,项目的各种版本都存储在服务器上,程序开发人员首先将从服务器上获得一份项目的最新版本,并将其复制到本机,然后在此基础上,每个开发人员可以在自己的客户端进行独立的开发工作,并且可以随时将新代码提交给服务器。当然也可以通过更新操作获取服务器上的最新代码,从而保持与其他开发者所使用版本的一致性。
下面我们具体看一下,如何基于 SVN 实现配置仓库。
SVN
config Server中的pom 文件增加如下依赖:
<dependency>
<groupId>org.tmatesoft.svnkit</groupId>
<artifactId>svnkit</artifactId>
<version>1.8.12</version>
</dependency>
复制代码
bootstrap.yml中关于config Server的配置如下:
spring:
cloud:
config:
server:
svn:
uri: svn://localhost:443/keets/config-repo
username: user
password: pwd
复制代码
config Server启动时的 “spring.profiles.active“ 指定为“svn”,这样configServer就切换到了SVN上面了。关于SVN方式的其他功能,我们在此不做扩展了,读者可以自行查阅文档。
小结
本文主要介绍了 Spring Cloud Config 客户端覆写远端的配置属性以及使用SVN或本地文件系统作为配置仓库两个进阶应用的技巧。下面的文章,我们仍将继续学习 Spring Cloud Config 本地文件系统配置的相关应用。