Spring Cloud Config Server入门

起步

通过官方的脚手架生成工具Spring Initializr 选择两个依赖:

  • Config Server
  • Eureka Discovery Client

配置

开启ConfigServer

启动类上增加 @EnableConfigServer 注解(也就是这个注解搭配Auto Configure就算注入了相关的配置)

application.properties配置文件

# 配置端口、服务名称以及本地测试用的存储目录
server.port=9000
spring.application.name=config-server
spring.cloud.config.server.git.uri=file:///C:/config

# 因为配置中心本身是无状态的,和其他服务一样也可以注册到Registry,也算是一种HA策略吧
eureka.client.region=default
eureka.client.registryFetchIntervalSeconds=5
eureka.client.serviceUrl.defaultZone=http://localhost:9001/eureka/
eureka.instance.prefer-ip-address=true

本地存储配置的目录初始化

因为配置中心支持多种底层存储,常见就是git/svn/jdbc,在C:/config下执行git init

启动

main函数直接run,控制台打印log一般都是启动成功以及报错信息(注册到eureka报错,因为还没启动注册中心)

使用

我在哪能看到配置

官方嫡系的配置中心因为底层存储是可选的,所以没有一个统一的管理后台,也就是你用git 就用git相关的管理工具,jdbc自己做个后台。

配置中心如何访问

  • /{application}/{profile}[/{label}]
  • /{application}-{profile}.yml
  • /{label}/{application}-{profile}.yml
  • /{application}-{profile}.properties
  • /{label}/{application}-{profile}.properties

配置的大概设计思想

对于某一个服务来说,一般都会有一个全局配置 + 应用公共配置 + 环境特有配置,也就是常见的application.properties + application-{profile}.properties

但是由于配置中心是集中式的管理所有应用的配置,当然不可能都叫application,所以采取应用的spring.application.name来区分不同应用的配置文件,application作为全局配置的默认规则

拿订单服务举个例子,假如订单服务就叫order,那么在SpringCloudConfig里比较典型的一个存储list:

  • application.properties
  • order.properties
  • order-dev.properties
  • order-stg.properties
  • order-prd.properties

准备下测试用的配置数据

# application.properties
global.xxx=yyy

# order.properties
server.port=10000
order.hello=default

# order-prd.properties
order.hello=prd

这三个文件放到指定的存储目录C:/config,并git add commit

测试配置访问

http://localhost:9000/order/prd

{
    "name": "order",
    "profiles": ["prd"],
    "label": null,
    "version": "9a952387b9dd640f9b43a061c2a0d74b1b41de70",
    "state": null,
    "propertySources": [{
        "name": "file:///C:/config/order-prd.properties",
        "source": {
            "order.hello": "prd"
        }
    }, {
        "name": "file:///C:/config/order.properties",
        "source": {
            "server.port": "10000",
            "order.hello": "default"
        }
    }, {
        "name": "file:///C:/config/application.properties",
        "source": {
            "global.xxx": "yyy"
        }
    }]
}

http://localhost:9000/order/default

{
    "name": "order",
    "profiles": ["default"],
    "label": null,
    "version": "9a952387b9dd640f9b43a061c2a0d74b1b41de70",
    "state": null,
    "propertySources": [{
        "name": "file:///C:/config/order.properties",
        "source": {
            "server.port": "10000",
            "order.hello": "default"
        }
    }, {
        "name": "file:///C:/config/application.properties",
        "source": {
            "global.xxx": "yyy"
        }
    }]
}

default只是一个约定,就算你随便写一个不存在的profile也会和default返回结果一样(因为没有order-default.properties)

done!

你可能感兴趣的:(Spring Cloud Config Server入门)