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

浙公网安备 33010602011771号