同样先示例server端的代码,基本步骤一样。
需要多引入svnkitr包
和git版本稍有区别,需要显示声明subversion.
启动类没有变化,添加<code>@enableconfigserver</code>激活对配置中心的支持
服务端测试
访问:<code>http://localhost:8001/neo-config-dev.properties</code>,返回:<code>neo.hello: hello im dev</code>,说明服务端可以正常读取到svn代码库中的配置信息。修改配置文件<code>neo-config-dev.properties</code>中配置信息为:<code>neo.hello=hello im dev update</code>,再次在浏览器访问<code>http://localhost:8001/neo-config-dev.properties</code>,返回:<code>neo.hello: hello im dev update</code>。说明server端会自动读取最新提交的内容
客户端测试
客户端直接使用上一篇示例项目<code>spring-cloud-config-client</code>来测试,配置基本不用变动。启动项目后访问:<code>http://localhost:8002/hello,返回:</code>hello im dev update“说明已经正确的从server端获取到了参数。同样修改svn配置并提交,再次访问<code>http://localhost:8002/hello</code>依然获取的是旧的信息,和git版本的问题一样。
现在来解决上一篇的遗留问题,这个问题在svn版本中依然存在。spring cloud config分服务端和客户端,服务端负责将git(svn)中存储的配置文件发布成rest接口,客户端可以从服务端rest接口获取配置。但客户端并不能主动感知到配置的变化,从而主动去获取新的配置。客户端如何去主动获取新的配置信息呢,springcloud已经给我们提供了解决方案,每个客户端通过post方法触发各自的<code>/refresh</code>。
修改<code>spring-cloud-config-client</code>项目已到达可以refresh的功能。
增加了<code>spring-boot-starter-actuator</code>包,<code>spring-boot-starter-actuator</code>是一套监控的功能,可以监控程序在运行时状态,其中就包括<code>/refresh</code>的功能。
需要给加载变量的类上面加载<code>@refreshscope</code>,在客户端执行<code>/refresh</code>的时候就会更新此类下面的变量值。
springboot 1.5.x 以上默认开通了安全认证,所以需要在配置文件<code>application.properties</code>添加以下配置
ok 这样就改造完了,以post请求的方式来访问<code>http://localhost:8002/refresh</code> 就会更新修改后的配置文件。
我们再次来测试,首先访问<code>http://localhost:8002/hello</code>,返回:<code>hello im dev</code>,我将库中的值修改为<code>hello im dev update</code>。在win上面打开cmd执行<code>curl -x post http://localhost:8002/refresh</code>,返回<code>["neo.hello"]</code>说明已经更新了<code>neo.hello</code>的值。我们再次访问<code>http://localhost:8002/hello</code>,返回:<code>hello im dev update</code>,客户端已经得到了最新的值。
每次手动刷新客户端也很麻烦,有没有什么办法只要提交代码就自动调用客户端来更新呢,github的webhook是一个好的办法。
webhook是当某个事件发生时,通过发送http post请求的方式来通知信息接收方。webhook来监测你在github.com上的各种事件,最常见的莫过于push事件。如果你设置了一个监测push事件的webhook,那么每当你的这个项目有了任何提交,这个webhook都会被触发,这时github就会发送一个http post请求到你配置好的地址。
如此一来,你就可以通过这种方式去自动完成一些重复性工作,比如,你可以用webhook来自动触发一些持续集成(ci)工具的运作,比如travis ci;又或者是通过 webhook 去部署你的线上服务器。下图就是github上面的webhook配置。

<code>payload url</code> :触发后回调的url
<code>content type</code> :数据格式,两种一般使用json
<code>secret</code> :用作给post的body加密的字符串。采用hmac算法
<code>events</code> :触发的事件列表。
events事件类型
描述
push
仓库有push时触发。默认事件
create
当有分支或标签被创建时触发
delete
当有分支或标签被删除时触发
svn也有类似的hook机制,每次提交后会触发post-commit脚本,我们可以在这里写一些post请求
这样我们就可以利用hook的机制去触发客户端的更新,但是当客户端越来越多的时候hook支持的已经不够优雅,另外每次增加客户端都需要改动hook也是不现实的。其实spring cloud给了我们更好解决方案,后面文章来介绍。
<a href="https://github.com/ityouknow/spring-cloud-starter">示例代码</a>
作者:纯洁的微笑
版权归作者所有,转载请注明出处