spring cloud config使用总结

一、作用
在没有使用统一配置中心之前,每个微服务都各自有自己的配置,这样就导致项目配置不方便维护、安全与权限的问题,以及修改了配置文件项目就需要重启。spring cloud config配置中心就可以解决这些问题。
二、原理
spring cloud config使用总结_第1张图片
spring cloud config分为server端和client端。当项目启动的时候,config server会从远端git拉取配置然后会更新本地仓库中的配置文件,然后config client端通过在eureka中获取到config server端进而获取到配置文件。当config server和远端的git失去联系时,config server就会从本地仓库获取配置内容。
三、使用
1.config server
(1)添加依赖


    org.springframework.cloud
    spring-cloud-config-server

(2)启动类上添加注解

@EnableConfigServer

(3)修改配置文件

spring:
  cloud:
    config:
      server:
        git:
          uri: #远端git地址
          username: #用户名
          password: #密码
          basedir:  #因为config server要从远端git上拉取配置放到本地仓库,所以这里指定本地仓库的地址

启动config server直接访问配置文件看是否生效。
(4)访问配置文件的规则
/{label}/{name}-{profiels}.yml
label:指的git分支的名称,如果不写就默认是master分支。
name:指的是在git上的文件名。
profiles:指的是配置,可以当做环境来理解。列如开发环境就可以写/order-dev.yml,生产环境写/order-pro.yml

2.config client
(1)添加依赖


    org.springframework.cloud
    spring-cloud-config-client

(2)修改配置文件
config client先要通过eureka找到config server实例再拉取配置文件,当config server实例有多个时,就会通过负载均衡策略选取一个实例。所以要将eureka 的地址配置写在bootstrap.yml文件中并且将application.yml改成bootstarp.yml。保证config client服务在启动的时候先加载bootstrap.yml中的配置。

spring:
  application:
    name: product #既指的是服务名,也是你在git上保存该项目的配置文件名
  cloud:
    config:
      discovery:
        enabled: true
        service-id: #config server的服务名
      profile: #指的是环境的意思,比如你要找你在git上配置的order-dev.yml,这里就写dev

3.实现修改配置文件,项目不需要重新启动
spring cloud config使用总结_第2张图片
使用spring cloud bus组件可以达到配置自动刷新。当config server和config client中使用spring cloud bus组件之后,config server会对外暴露一个接口/actuator/bus/refresh。当配置发生改变之后,远端的git通过webhook请求/actuator/bus/refresh接口通知config server,config server会给消息队列中发送一个消息,config client端会消费这个消息,从而达到配置自动刷新的功能。

(1)在config server和config client端添加依赖


    org.springframework.cloud
    spring-cloud-starter-bus-amqp

(2)修改config server的配置文件,暴露/actuator/bus/refersh接口

management:
  endpoints:
    web:
      exposure:
        include: "*"

(3)在需要用到配置的地方添加注解

//列如我需要拿到配置文件中前缀名为order的配置,可以写一个配置类上面添加@RefreshScope注解
@Data
@Component
@ConfigurationProperties("order")
@RefreshScope //刷新的范围
public class OrderConfig {

    private String orderId;

    private BigDecimal orderPrice;
}

//然后再需要用到的地方直接把配置类注入进来
@RestController
public class OrderConfigController {

    @Autowired
    private OrderConfig orderConfig;

    @GetMapping("/order/print")
    public String orderPrint(){
        return orderConfig.getOrderId();
    }
}

(4)在远端git的webhook中配置访问/actuator/bus/refresh接口的地址即可。也可以用postman模拟发送一个post请求,请求的地址和webhook中配置的地址一样。

你可能感兴趣的:(spring cloud config使用总结)