config,同一配置中心
存在的原因,是为了解决什么问题?
- 方便配置文件更新,同一配置在git
- 配置内容安全与权限(即开发不能对项目的配置进行修改)
- 更新配置项目需要重启(config配置后,不用重启)
config,分两端,一段是config-server端,一端是client端。server端负责从git上拉取配置,保存在本地git,
那么为什么本地git存一份,防止远端git出问题不能访问,这时能访问本地git的配置文件。
再通过eureka分发配置到相应的机器上。
首先配置config-server端
1.引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
2.启动类上加注解
@EnableConfigServer
3.配置文件配置
spring:
cloud:
config:
server:
git:
uri: https://gitee.com/pengqingyang/config-repo
username: xxxx
password: xxx
4.Client配置
引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
修改配置
spring:
cloud:
config:
discovery:
enabled: true
service-id: CONFIG //eureka配置中心的server端
profile: dev
配置中心加载配置文件,有个要注意的地方,如果获取的是order-dev,即在配置了profile的情况下,访问order-dev配置文件,会默认加载oder文件和order-dev和并在一起。
Spring cloud bus自动刷新配置
原由,服务启动后,各服务会访问config-server端,获取配置文件信息,如果,中途配置文件信息改变了。
那么,各服务端也不能更新信息?
怎么解决呢,那就是服务端主动推送消息,利用消息队列(RabbitMQ)传送消息
config-server端利用spring cloud bus配置服务端接口,一般配置(/bus-refresh)
而自动更新配置怎么做?为什么?
因为,client端只在启动服务,获取一次配置,中途不会重启,所以无法获取配置。
那怎么做?通过RabbitMq推送更新消息。
在服务端配置Spring cloud bus,配置/bus-refresh接口,由github的Webhook接口,更新了github上的接口,便会触发服务端的/bus-refresh接口,服务端便会推送消息到MQ,
在服务端暴露/bus-refresh接口
management:
endpoints:
web:
exposure:
include: bus-refresh
在client端添加
@RefreshScope注解
启动github上的Webhooks,在地址栏后面加上 “外面穿透的地址/monitor”
重启项目即可