关闭

springcloud(七):配置中心svn示例和refresh

2778人阅读 评论(2) 收藏 举报
分类:

上一篇springcloud(六):配置中心git示例留了一个小问题,当重新修改配置文件提交后,客户端获取的仍然是修改前的信息,这个问题我们先放下,待会再讲。国内很多公司都使用的svn来做代码的版本控制,我们先介绍以下如何使用svn+Spring Cloud Config来做配置中心。

svn版本

同样先示例server端的代码,基本步骤一样。

1、添加依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
    <dependency>
        <groupId>org.tmatesoft.svnkit</groupId>
        <artifactId>svnkit</artifactId>
    </dependency>
</dependencies>

需要多引入svnkitr包

2、配置文件

server:
  port: 8001

spring:
  cloud:
    config:
      server:
        svn:
          uri: http://192.168.0.6/svn/repo/config-repo
          username: username
          password: password
        default-label: trunk
  profiles:
    active: subversion
  application:
    name: spring-cloud-config-server

和git版本稍有区别,需要显示声明subversion.

3、启动类

启动类没有变化,添加@EnableConfigServer激活对配置中心的支持

@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}

4、测试

服务端测试

访问:http://localhost:8001/neo-config-dev.properties,返回:neo.hello: hello im dev,说明服务端可以正常读取到svn代码库中的配置信息。修改配置文件neo-config-dev.properties中配置信息为:neo.hello=hello im dev update,再次在浏览器访问http://localhost:8001/neo-config-dev.properties,返回:neo.hello: hello im dev update。说明server端会自动读取最新提交的内容

客户端测试

客户端直接使用上一篇示例项目spring-cloud-config-client来测试,配置基本不用变动。启动项目后访问:http://localhost:8002/hello,返回:hello im dev update“说明已经正确的从server端获取到了参数。同样修改svn配置并提交,再次访问http://localhost:8002/hello依然获取的是旧的信息,和git版本的问题一样。

refresh

现在来解决上一篇的遗留问题,这个问题在svn版本中依然存在。Spring Cloud Config分服务端和客户端,服务端负责将git(svn)中存储的配置文件发布成REST接口,客户端可以从服务端REST接口获取配置。但客户端并不能主动感知到配置的变化,从而主动去获取新的配置。客户端如何去主动获取新的配置信息呢,springcloud已经给我们提供了解决方案,每个客户端通过POST方法触发各自的/refresh

修改spring-cloud-config-client项目已到达可以refresh的功能。

1、添加依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

增加了spring-boot-starter-actuator包,spring-boot-starter-actuator是一套监控的功能,可以监控程序在运行时状态,其中就包括/refresh的功能。

2、 开启更新机制

需要给加载变量的类上面加载@RefreshScope,在客户端执行/refresh的时候就会更新此类下面的变量值。

@RestController
@RefreshScope // 使用该注解的类,会在接到SpringCloud配置中心配置刷新的时候,自动将新的配置更新到该类对应的字段中。
class HelloController {

    @Value("${neo.hello}")
    private String hello;

    @RequestMapping("/hello")
    public String from() {
        return this.hello;
    }
}

3、测试

springboot 1.5.X 以上默认开通了安全认证,所以需要在配置文件application.properties添加以下配置

management.security.enabled=false

OK 这样就改造完了,以post请求的方式来访问http://localhost:8002/refresh 就会更新修改后的配置文件。

我们再次来测试,首先访问http://localhost:8002/hello,返回:hello im dev,我将库中的值修改为hello im dev update。在win上面打开cmd执行curl -X POST http://localhost:8002/refresh,返回["neo.hello"]说明已经更新了neo.hello的值。我们再次访问http://localhost:8002/hello,返回:hello im dev update,客户端已经得到了最新的值。

每次手动刷新客户端也很麻烦,有没有什么办法只要提交代码就自动调用客户端来更新呢,github的webhook是一个好的办法。

4、webhook

WebHook是当某个事件发生时,通过发送http post请求的方式来通知信息接收方。Webhook来监测你在Github.com上的各种事件,最常见的莫过于push事件。如果你设置了一个监测push事件的Webhook,那么每当你的这个项目有了任何提交,这个Webhook都会被触发,这时Github就会发送一个HTTP POST请求到你配置好的地址。

如此一来,你就可以通过这种方式去自动完成一些重复性工作,比如,你可以用Webhook来自动触发一些持续集成(CI)工具的运作,比如Travis CI;又或者是通过 Webhook 去部署你的线上服务器。下图就是github上面的webhook配置。

  • Payload URL :触发后回调的URL
  • Content type :数据格式,两种一般使用json
  • Secret :用作给POST的body加密的字符串。采用HMAC算法
  • events :触发的事件列表。
events事件类型 描述
push 仓库有push时触发。默认事件
create 当有分支或标签被创建时触发
delete 当有分支或标签被删除时触发

svn也有类似的hook机制,每次提交后会触发post-commit脚本,我们可以在这里写一些post请求

这样我们就可以利用hook的机制去触发客户端的更新,但是当客户端越来越多的时候hook支持的已经不够优雅,另外每次增加客户端都需要改动hook也是不现实的。其实Spring Cloud给了我们更好解决方案,后面文章来介绍。

示例代码


作者:纯洁的微笑
出处:http://www.ityouknow.com/
版权归作者所有,转载请注明出处

0
0
查看评论

spring cloud config 用svn做配置文件仓库

刚接触spring cloud 的 ;做了一个svn做配置文件仓库demo; 创建一个spring boot工程作为 spring  cloud config  server ;下面是pom.xml文件; <project xmlns="http://mave...
  • chenhuaping007
  • chenhuaping007
  • 2017-02-16 11:47
  • 6352

spring cloud config server使用svn来作为外部配置中心

默认情况下config server是使用git来作为配置中心的,由于还是有许多公司还是用svn来作为版本管理工具,幸好config server服务也支持svn配置,下面就来试验一下 服务端配置: 新建一个config-server项目,pom文件: <project xmlns=&quo...
  • xiao_jun_0820
  • xiao_jun_0820
  • 2017-09-20 10:11
  • 2120

使用Spring Cloud Config搭建配置中心

笔者的微服务项目中需要使用一个统一的管理分布式系统的配置中心,之前试用过Disconf。同时笔者也在留意是否有其它的可选方案。最近接触到Spring Cloud Config,认为也是一个搭建配置中心不错的选择,在此和大家分享一下试用的经验,供大家参考。
  • gongxsh00
  • gongxsh00
  • 2016-05-01 22:53
  • 43185

Spring Cloud 如何选择分布式配置中心

微服务必备的几样武器有了,才能独闯武林, 有哪几样呢? 注册中心(eureka, consul, zk, etcd) 配置中心 (Spring Cloud Config, disconf ) API网关 (Spring Cloud zuul, kong) 熔断器 (hystrix) 链路追踪 (sl...
  • u010889990
  • u010889990
  • 2017-12-08 14:55
  • 141

javaweb——spring cloud分布式系统(1)搭建配置管理中心

原创文章,转载请注明              spring cloud的一个子项目spring cloud config致力于为分布式系统提供一个配置中心,方便分布式系统进行配置...
  • guduyishuai
  • guduyishuai
  • 2017-02-17 17:41
  • 3401

使用Spring Cloud构建统一配置中心

Spring Boot有一个非常重要的改变就是简化了配置,使用application.properties文件定义了很多默认配置(参考之前的文章:http://www.jianshu.com/p/860addd7865d)。 但是配置文件分开管理来还是比较麻烦的,而且环境越多配置约容易出问题。...
  • zhangbin666
  • zhangbin666
  • 2017-06-14 15:46
  • 712

spring cloud config 配置svn 实例

首先创建了svn的项目 然后是config-server;应用端的 pom.xml文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www....
  • shunzi1046
  • shunzi1046
  • 2017-05-11 14:40
  • 2436

Empty repository的SVN工程在Spring Cloud Config下的问题

我们的SVN库在创建的时候使用了空库(推荐方式)创建的,这样就没有 trunk, branches, tags这些文件夹,也就是下面这个向导页的时候选择的是 Empty repository (recommended option): 这样我们的工程是这个样子的: 在配置 Spr...
  • Allen_jinjie
  • Allen_jinjie
  • 2017-06-29 16:27
  • 406

干货实操:微服务Spring Cloud 系列(一) Spring cloud Config 用SVN做配置仓库

实操怎么使用svn 做配置仓库,并刷新,后续小节使用spring bus 刷新配置。
  • zhm6422107
  • zhm6422107
  • 2017-06-25 18:24
  • 261

Spring Cloud入门2——配置中心Config

Spring Cloud Config 配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。 也就是说,我们可以使用Spring Cloud Config来获取远程服务器上的配置信息。 可以分为两个部分: 服务端: 配置服务端,服...
  • a60782885
  • a60782885
  • 2017-04-06 19:02
  • 7235
    微信公众号:纯洁的微笑
          分享技术与生活,欢迎大家关注.


    链接:


       关于我


       文章索引


       交流群:144304696


       获取十套精选1000G架构师资料


    个人资料
    • 访问:299978次
    • 积分:4094
    • 等级:
    • 排名:第8980名
    • 原创:75篇
    • 转载:2篇
    • 译文:0篇
    • 评论:423条
    博客专栏
    最新评论
    站长统计