配置中心
配置中心
概念
为什么需要配置中心
单体应用,配置写在配置文件中,没有什么大问题
如果要切换环境,可以切换不同的profile(2种方式),但在微服务中
- 微服务比较多,成百上千,配置很多,需要集中管理
- 管理不同环境的配置
- 需要动态调整配置参数,更改配置不停服
配置中心介绍
分布式配置中心包括3个部分:
- 存放配置的地方:git ,本地文件等
- config server:从 1 读取配置
- config client:是 config server 的客户端消费配
配置都不会自己更新,都是需要触发client才去git上拉取的或者触发在config-server上查看配置时,才去git上拉取
使用
- 环境部署之前,将所需的配置信息推送到配置仓库
- 启动配置中心服务端,将配置仓库的配置信息拉取到服务端,配置服务端对外提供RESTful接口
- 启动配置客户端,客户端根据 spring.cloud.config 配置的信息去服务器拉取相应的配置
创建4个配置文件
config-client-dev.yml
env: dev
Config Server
官方地址:https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-config-server
添加依赖
<!-- 配置中心服务端:config-server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
yml
spring:
cloud:
config:
server:
git:
uri: https://github.com/xxxxx
username:
password:
#默认是秒,因为git慢
timeout: 15
启动类
添加注解
@EnableConfigServer
测试:
启动eureka,config-server
访问:
http://localhost:6001/config-client-dev.yml
http://localhost:6001/config-client-dev.properties
http://localhost:6001/config-client-dev.json
获取配置规则:根据前缀匹配
- /{name}-{profiles}.properties
- /{name}-{profiles}.yml
- /{name}-{profiles}.json
- /{label}/{name}-{profiles}.yml
- name 服务名称
- profile 环境名称,开发、测试、生产:dev qa prd
- lable 仓库分支、默认master分支
匹配原则:最左前
换分支
dev分支上:config-client-dev.yml
#服务端口
server:
port: 8001
env: branch-dev-dev
访问
- http://localhost:6001/dev/config-client-dev.yml
- http://localhost:6001/dev/config-client-dev.json
不写分支,默认是master
Config client
discovery方式
pom
<!-- 配置中心客户端:config-client --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-client</artifactId> </dependency> <!-- web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- eureka客户端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
application.yml
server:
port: 8011
bootstrap.yml
#应用名称,配置文件名,此时:congif-client-dev.yml
spring:
application:
name: config-client
cloud:
config:
discovery:
enabled: true
# config server 的服务id
service-id: config-server
# 环境
profile: dev
# 分支
label: master
代码
@Value("${env}") private String env;
访问
http://localhost:8011/config/env0
远程配置已经拉过来了
url方式
```sh
spring:
cloud:
config:
# 和下面的discovery互斥
# uri:
# - http://localhost:6001
```
论读书
睁开眼,书在面前 闭上眼,书在心里
睁开眼,书在面前 闭上眼,书在心里