配置中心初识

      在项目开发完毕,进行部署运维的时候,总有很多配置文件要修改,稍有不慎漏掉或者跟运维人员沟通不畅就会很麻烦,很多时候上线时候的加班时间就是这么秏进去的。spring cloud的配置中心提供了让我们把配置文件统一管理的解决方案,只需要在一个地方统一改一个配置文件,上线运维不用做任何修改,是不是很爽!其实这不是spring 独创,java也有一些类似定位的产品,比如百度的disconf,360的qconf以及淘宝的diamond。
------------------------------------------------------------------------------------------------------------------------------
准备git环境:
      本实例采用码云作为git服务端,创建项目cloudconfig,在其下创建文件夹demo1,demo1中创建两个文件:client-a-envconf.prpperties跟client-a-master.yml,文件内容为:
  yml文件:
server: 
    ip: localhost
    port: 9999 
    msg: client1 配置文件测试用例
      properties文件:
server.ip=localhost
server.port=9999
server.msg=client1 配置文件测试用例
服务端搭建:
      1、创建spring boot项目configserver,pom文件主要内容如下:
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Dalston.SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
      依赖starter:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>
      如果要跟eureka之类的进行搭配,自行添加相关starter即可。
2、application.yml配置:
server:
  port: 8080
spring:
  application: 
    name:config-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/anhdbbt/cloudconfig.git #git地址
          search-paths: demo*     #在git中的搜索路径
          default-label: master      #默认分支
          username: wzy830715@163.com  #git账号
          password: ******    #git密码
3、启动并测试
      在启动类配置@EnableConfigServer注解,启用配置中心。访问localhost:8080/client-a/envconfig可以看到如下页面:
      可以看到client-a-envconf.properties中的内容,包括ip,port,msg,不过msg我本地显示为乱码,,,,不要在意这些细节。
      这个地址的规则是啥?
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

application就是文件名的前缀,profile就是后缀,label就是git的分支所以该文件还可以这么访问:

      yml文件也是一样,根据以上规则进行填写即可。
      这样,我们发现访问的不是git而是configserver,也可以获取到配置文件信息。个人觉得,这个地址的匹配规则是初学者不了解的时候最不容易懂的地方。
客户端搭建:
1、搭建spring boot项目configclient,pom文件主要内容如下:
      parent部分跟服务端相同,都是引入spring boot跟cloud的默认配置
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Dalston.SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
      依赖的starter:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- client需要添加以下依赖,否则访问/refresh将会得到404 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
      这里跟服务端的区别是config的两个starter不同,一个是config-server,一个是starter-config。
2、配置bootstrap.yml
spring:
  application:
    name: client-a
  cloud:
    config:
      uri: http://localhost:8080/    #configserver的地址
      profile: master     #文件后缀
      label: master        #分支为master
3、启动类作为restcontroller并进行测试
      添加@RefreshScope@RestController注解,然后添加代码:
@Value("${server.msg}")   //配置文件中的节点
private String configValue;
@RequestMapping("testConfig")
public String test(){
    return "读取到配置中心:" + configValue;
}

    我们发现端口号9999在本地并没有配置,而是在git的配置文件中的,客户端读到了这个配置。而页面的显示更是表明读到了配置文件中的msg字段。

------------------------------------------------------------------------------------------------------------------------------
    以上只是配置中心最简单的helloword的实现,它还支持敏感信息加密,配置security跟encrypt相关选项即可,不作赘述。

 

posted @ 2018-07-08 22:15  facelessvoidwang  阅读(180)  评论(0编辑  收藏  举报