Config
Config的作用
- 为项目的配置文件提供一个统一的管理中心
- 更方便的去维护配置文件信息
- 给配置文件增加权限信息,更加安全
- 在不重启项目的前提下,动态的修改配置文件并生效
搭建ConfigServer
准备Git仓库,添加文件作为Search模块的配置文件(项目名-环境名.yml)
创建ConfigServer项目
导入依赖<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> </dependencies>
在启动类添加注解
@EnableConfigServer
编写配置文件
spring: cloud: config: server: git: uri: http://:8087/402424668/config-repo.git # 指定git仓库地址 username: 402424668 # 公开项目可以省略 password: 402424668 # 公开项目可以省略 basedir: D:\\basedir # 指定本地仓库地址,也可以省略
启动项目访问配置文件信息
http://ip:port/Git分支/项目名-环境名.yml
搭建ConfigClient服务
导入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>
- 将application.yml修改为bootstrap.yml(因为SpringBoot工程会先加载bootstrap.yml,再加载application.yml,我们需要再加载application.yml之前,就去Configserver拉取到需要加载的配置信息)
- 编写bootstrap.yml:
ConfigClient会去ConfigServer拉取 branch/服务名-profile.yml# 指定服务名称 spring.appication.name=服务名 # 指定profile和branch spring.cloud.config.profile=dev # 指定profile名称 spring.cloud.config.label=master # 指定branch名称(默认为master) # 指定Eureka的注册信息地址(找到ConfigServer的地址,通过Eureka) eureka.client.service-url.defaultZone=http://localhost:8761/eureka # 指定开关和configserver服务的名称 # 开启configclient(默认是falses) spring.cloud.config.discovery.enable=true # 指定confingserver服务的名称(默认confingserver) spring.cloud.config.discovery.service-id=confingserver
实现动态配置
- 当Gitlab上的配置文件修改之后,ConfigServer会自动同步。
- 当Gitlab上的配置文件修改之后,我希望ConfigServer可以基于bus消息总线给其他所有服务发送一个消息,通知其他服务,配置文件有变化,动态更新一下。
- 通过acturtor提供的一个请求路径 http://ip:port/acturtor/bus-refresh
- 其他服务就可以通过bus消息总线接收到发送过来的消息,动态更新。
Ps:需要使用到动态更新配置的位置中,添加@RefreshScope注解,否则无效
导入依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency>
编写配置文件连接RabbitMQ信息
spring: rabbitmq: host: 192.168.199.109 port: 5672 username: test password: test virtual-host: /test
实现手动刷新
导入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
编写配置文件
management: endpoints: web: exposure: include: "*">
为customer添加一个controller
@RestController @RefreshScope //必须要加 public class CustomerController { @Value("${env}") private String env; @GetMapping("/env") public String env(){ return env; } }
测试
- CONFIG在Gitee修改之后,自动拉取最新的配置信息。
- 其他模块需要更新的话,手动发送一个请求http://ip:port/actuator/bus-refresh,不重启项目,即可获取最新的配置信息
实现自动动态刷新- 需要在Gitlab的配置文件发生改变后,由Gitlab发送请求给ConfigServer
- GitLab发送请求给ConfigServer需要通过外网.
- 准备内网穿透:natapp(一定要映射上你ConfigServer端口)
- 配置GitLab,在配置文件改变后发送请求
- 在GitLab发送请求后,会报一个400的错误。
- 在ConfigServer中添加过滤器,处理请求体中的参数。