由于卓望公司使用的代码版本控制工具用的SVN作为代码仓库,恰巧git本人没用过。
所以,就想聊聊svn作为spring cloud config配置中心的仓库那点事...
在分布式系统中,会有很多个微服务,并且微服务可能是Ha,如此,修改配置文件给我们带来了很多时间成本的开销,故spring cloud config解决了这个问题,只要我们修改配置仓库的文件,就能很好的修改配置文件的参数,特别简单易用。
Spring Cloud Config 简介:
Spring Cloud Config 支持配置文件放在远程仓库中,例如 Git、SVN,也可以挂载到本地。spring cloud config 分为server、client端。
spring cloud config server端:
新建一个springcloud config server项目:
首先,从pom文件开始吧:引入依赖
主要引入如图中的2个依赖jar包,config-server标志服务作为config server服务,svnkit标识svn作为配置仓库。SVNKit (JavaSVN)是一个纯Java的SVN客户端库,使用 SVNKit无需安装任何SVN的客户端,支持各种操作系统。这不是一个开源的类库,但你可以免费使用。通过SVNKit,你可以在SVN上开发出自己的应用。
配置文件application.properties
这里要注意的是要使用svn作为配置中心,必须显示声明spring.profiles.active=subversion,不然还是用的git,svn默认的lable是trunk,git默认的是master,客户端在使用的时候注意指定label,这里search-paths使用了{application}占位符,用来根据客户端的spring.application.name来动态搜索配置目录,即按照每个应用一个配置目录的形式来组织配置。
如上这个图中比较重要的就是svn 配置仓库的配置了。
最后看一下,启动类:
@EnableConfigServer:将该服务作为一个config server服务启动
启动服务,验证config server服务是否可用:访问 http://10.2.8.42:1112/efficiency-basicdata-service-dev.properties
这里要注意的是要使用svn作为配置中心,必须显示声明spring.profiles.active=subversion,不然还是用的git,svn默认的lable是trunk,git默认的是master,客户端在使用的时候注意指定label,这里search-paths使用了{application}占位符,用来根据客户端的spring.application.name来动态搜索配置目录,即按照每个应用一个配置目录的形式来组织配置。
完美显示,无问题.
spring cloud config client服务端:
客户端也引入了eureka依赖,由于客户端直接从config-server上获取配置而不是从svn上获取,所以不需要引入svnkit依赖
POM文件内容:
高可用配置中心是通过服务id去自动发现config-server服务地址的,所以不用配置spring.cloud.config.uri指向具体的地址了,直接通过spring.cloud.config.discovery.service-id来指定config server的服务名,这里是config-server,同时需要将spring.cloud.config.discovery.enable=true(默认为false,使用uri方式),声明通过服务发现的方式来获取config server地址。
为了能动态刷新配置,需要在允许动态刷新的类上注解@RefreshScope,这里我们定义了一个变量from,值是通过@Value("${from}")注解从配置中获取的值自动注入的,也可以从Environment中获取
修改配置文件内容提交,刷新配置文件,取到最新值:
首先查询config client客户端查询hello的值:http://10.2.8.42:2010/hello
修改svn文件:
通过访问spring cloud config server端发现,已经修改过来了:http://10.2.8.42:1112/efficiency-basicdata-service-dev.properties
通过接口访问客户端:http://10.2.8.42:2010/hello 发现并没有刷新,这时我们需要手动刷新一下:http://10.2.8.42:2010/refresh
朋友们,我不是特别会写博客,整个过程中遇到的坑都没有写出来,是不知道如何写,怎样写??????