spring-cloud(3)、配置中心 — Config

  配置对于系统来说是一个繁琐的事情,而且每个系统还分不同的环境,开发环境、测试环境、准生产环境、生产环境,各个系统各个环境的配置都不相同,Spring-Cloud提供了配置中心系统,下面就讲配置中心的服务端和客户端。

  这里留下一个问题,当配置更新的时候,配置中心怎么通知其他系统更改呢?

  • 服务端

  首先,在 src/main/resources 路径下新建repo路径,对应上面四个环境{开发(dev)、测试(test)、准生产(uat)、生产(prod)}新建四个配置文件(后缀properties和yml都可以),分别对应work-dev.properties、work-test.properties、work-uat.properties、work-prod.properties,并且里面的内容如下

#  环境名称请替换成对应环境名称英文,例如dev、test、uta、prod
name=环境名称

  然后,同样在 src/main/resources 路径下新建 application.yml,然后配置文件内容

server:
  port: 9090
spring:
  application:
    name: config
  profiles:
    active: native
  cloud:
    config:
      server:
        native:
          search-locations: file:F:/xxx/config/src/main/resources/repo

  接着,编写启动代码,如下

package com.fzhsh.cloud.config;

@SpringBootApplication
@EnableConfigServer
public class ConfigApp {

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

  最后,访问http://localhost:9090/work/dev,结果如下

{"name":"work","profiles":["dev"],"label":null,"version":null,"state":null,"propertySources":[{"name":"file:F:/xxx/config/src/main/resources/repo/work-dev.properties","source":{"name":"dev"}}]}

  也可以通过访问http://localhost:9090/work-dev.properties,结果如下

name: dev

 

  • 客户端

  在原来的Module(client)上做集成配置中心的客户端,需要做的只有两个步骤。第一,增加配置;第二,编写测试代码

  首先,在 src/main/resources 路径下增加 bootstrap.yml(注意,必须要写在bootstrap.yml),添加一下内容

spring:
  profiles:
    active: dev
  cloud:
    config:
      uri: http://localhost:9090/
  application:
    name: work

  然后,编写测试代码,在原来的ClientApp,增加一个私有属性name,并且用@Value注解获取值,然后提供一个/value的HTTP接口测试@Value能否获取到配置中心的值

package com.fzhsh.cloud.clent;

@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class ClientApp {

    @Value("${name}")
    private String name;

    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("/show")
    public String getUrl(){
        List<ServiceInstance> list = discoveryClient.getInstances("server");
        if(list != null && !list.isEmpty()) {
            return list.get(0).getUri().toString();
        }
        return "no service info";
    }

    @GetMapping("/value")
    public String getValue(){
        return name;
    }

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

  最后,访问http://localhost:8080/value来访问,结果如下

dev
  • 配置中心说明

  在以上的前提下,本文主要是使用了本地文件的方式来学习配置中心,配置中心在Spring-Cloud的官方实例是采用git的方式,所以git的方式请大家参考后面的参考资料,并且本文留了一个问题(配置文件更新怎么通知客户端系统),然后说一下小知识点:

  配置中心服务端的文件类型可以是properties,也可以是yml,对于服务端的访问配置文件HTTP资源

 

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

 

  客户端bootstrap.yml配置

spring.application.name:对应前配置文件中的{application}部分
spring.cloud.config.profile:对应前配置文件中的{profile}部分
spring.cloud.config.label:对应前配置文件的git分支
spring.cloud.config.uri:配置中心的地址

  参考资料

http://cloud.spring.io/spring-cloud-static/Dalston.SR1/#_spring_cloud_config

posted @ 2017-06-09 17:38  風之殤  阅读(160)  评论(0)    收藏  举报