Config 的使用

Config Server

  1. 创建 git 项目,创建一级目录 config(可以不创建,这里是为了区分路径)。增加配置文件

    order-service-dev.yml

    order-service-test.yml

    order-service.yml

    order-service 为使用 config 客户端的项目名称,后缀为 profile-环境

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    order-service.yml

    dev: prod
    orderId: bbbb

    order-service-dev.yml

    env: dev
    orderId: aaaa


    order-service-test.yml
    env: test
    orderId: ccc
  2. 引入依赖

    1
    2
    3
    4
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
  3. 修改配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    spring:
    application:
    name: spring-cloud-config
    cloud:
    config:
    enabled: true
    server:
    git:
    uri: https://gitee.com/zerofuns/spring-cloud-config-server.git
    default-label: master
    search-paths: config
    password: ******
    username: zerofuns

    server:
    port: 8199

    eureka:
    client:
    service-url:
    defaultZone : http://localhost:8188/eureka

    注:这里整合了 eureka

  4. 启动 Config,在 application 增加@EnableConfigServer

config client

  1. 增加 bootstrap.yml 文件。因为 bootstrap.yml 的加载顺序是第一个的,因为加载属性之前必须先加载 spring-config,否者会直接报错。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    spring:
    cloud:
    config:
    discovery:
    enabled: true
    service-id: spring-cloud-config

    profiles:
    active: test

    eureka:
    client:
    service-url:
    defaultZone: http://localhost:8188/eureka
  2. 修改 application.yml

    1
    2
    3
    4
    5
    spring:
    application:
    name: order-service
    server:
    port: 8166

    这里的项目名字必须和 git 里面的文件名字前缀保持一致

  3. 使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    @RestController
    public class OrderServiceProvider implements OrderService {

    @Value("${orderId}")
    private String orderId;

    @Override
    public String info() {
    return "order info";
    }

    @GetMapping("orderId")
    public String getOrderId() {
    return orderId;
    }
    }
  4. 访问接口 http://localhost:8166/orderId

    1
    ccc

动态刷新配置

  1. 增加依赖

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

    1
    2
    3
    4
    5
    6
    7
    8
    management:
    endpoint:
    shutdown:
    enabled: false
    endpoints:
    web:
    exposure:
    include: '*'
  3. 修改配置之后,手动调用 http://localhost:8166/actuator/refresh (post 请求),配置自动刷新

上述这种情况,对于每一个 config 的客户端,都需要手动调用上述 refresh 接口,操作非常繁杂。可以通过 spring cloud bus 消息总线,通过消息队列订阅消息刷新配置。