配置中心需要的依赖(实现了自动从gitee或者github自动拉取配置文件的效果)
<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>
<!-- 服务总线 ,实现服务自动拉取配置文件 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus</artifactId>
</dependency>
<!-- user-service等能自动拉取配置文件是因为监听了消息队列,收到了配置文件更改的消息 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
配置文件 启动类需要额外添加注解@EnableConfigServer
server:
port: 12000
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://gitee.com/xxxxx # 仓库地址
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10001/eureka
management:
endpoints:
web:
exposure:
# 暴露触发消息总线的地址 此处不是随意设置的,必须是bus-refresh,另外还有bus-env service-registry 需要自行了解
include: bus-refresh
此处以user-service工程为例:
1.将user-service工程下的application.yml复制一份到gitee仓库,命名为user-service.yml;
2.创建bootstrap.yml文件(bootstrap.yml也是springboot默认会读取的配置文件,读取优先级还要高于application)
3.在UserController控制器上添加注解@RefreshScope代表此类会刷新数据
spring:
cloud:
config:
# 需要读取的文件名的前部分 user-service.yml user
name: user
# 需要读取的文件的后部分 (不包括后缀) user-service.yml service
profile: service
# 分支
label: master
discovery:
enabled: true
# 配置中心id
service-id: config-server
rabbitmq:
host: localhost
username: guest
password: guest
port: 5672
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10001/eureka
修改仓库中的配置文件 比如在最后加入字段 test = xixihaha;
注意配置中心连接到仓库的地址;
测试能否抓取到仓库中的配置文件:
在user-service的工程中读取该test字段,测试能否读取
修改仓库中配置文件中的test = haha;
然后使用postMan或者advanced REST client 发送post请求 到http://localhost:12000/bus-refresh 发送数据空 格式为json;
查看返回值是否20开头;
再次测试user-service读取到的test字段是否已经改变