1 引言

  • 配置文件分散在不同的项目中,不方便维护。
  • 配置文件的安全问题。
  • 修改完配置文件,无法立即生效。

image.png

2 搭建Config-Server

创建Maven工程,修改为SpringBoot
导入依赖

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-config-server</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.springframework.cloud</groupId>
  7. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  8. </dependency>

添加注解

  1. @EnableConfigServer

编写配置文件(Git的操作)

  1. spring:
  2. cloud:
  3. config:
  4. server:
  5. git:
  6. basedir: D:\basedir # 本地仓库的地址
  7. username: zjw_2301211@126.com # 远程仓库用户名
  8. password: z123123 # 远程仓库密码
  9. uri: https://gitee.com/zhengdaxian/config-resp.git # 远程仓库地址

http://localhost:8099/master/bootstrap-xxs.yml

测试(http://localhost:port/{label}/{application}-{profile}.yml)

label 就是你远程仓库分支名称
application 文件名称
“-“ 中横线 必须有
profile 必须有:如果没有profile后缀 也必须随便写一个,如果有就拉取你自己的profile(dev、test、pre、pro)

3 搭建Config-Client

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-config-client</artifactId>
  4. </dependency>

编写配置文件

  1. # 指定Eureka服务地址
  2. eureka:
  3. client:
  4. service-url:
  5. defaultZone: http://root:root@localhost:8761/eureka,http://root:root@localhost:8762/eureka
  6. #指定服务的名称
  7. spring:
  8. application:
  9. name: CUSTOMER-${version}
  10. cloud:
  11. config:
  12. discovery:
  13. enabled: true
  14. service-id: CONFIG
  15. profile: dev
  16. version: v1
  17. # CONFIG -> CUSTOMER-v1-dev.yml

4 实现动态配置

4.1 实现原理

image.png

4.2 服务连接RabbitMQ

导入依赖

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-bus-amqp</artifactId>
  4. </dependency>

编写配置文件连接RabbitMQ信息

  1. spring:
  2. rabbitmq:
  3. host: 192.168.199.109
  4. port: 5672
  5. username: test
  6. password: test
  7. virtual-host: /test

4.3 实现手动刷新

导入依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-actuator</artifactId>
  4. </dependency>

编写配置文件

  1. management:
  2. endpoints:
  3. web:
  4. exposure:
  5. include: "*"

为customer添加一个controller

  1. @RestController
  2. @RefreshScope //刷新
  3. public class CustomerController {
  4. @Value("${env}")
  5. private String env;
  6. @GetMapping("/env")
  7. public String env(){
  8. return env;
  9. }
  10. }

测试

  1. 1. CONFIGGitee修改之后,自动拉取最新的配置信息。
  2. 2. 其他模块需要更新的话,手动发送一个请求http://ip:port/actuator/bus-refresh,不重启项目,即可获取最新的配置信息

4.4 内网穿透

内网穿透的官网https://natapp.cn/
注册登录
购买一个免费的隧道。

image.png

下载客户端,并复制config.ini文件,在文件中指定authtoken

image.png

启动exe文件,并测试使用域名访问config接口

image.png

4.5 实现自动刷新

配置Gitee中的WebHooks
image.png
给Config添加一个过滤器
直接去代码中找到Filter