本文不是讲 Spring-Cloud-Config-Server / Spring-Cloud-Config-Client
怎么使用的。
这里说的 客户端
是指:Spring-Cloud-Config
的客户端。
零、问题描述
基于 Spring-Cloud
技术栈进行开发时,通常会配一个 Spring-Cloud-Config-Server
,各个 客户端
通过 Spring-Cloud-Config-Server
从 配置仓库
拉取自己服务的配置。
假设客户端 service-a
对应的配置文件为 service-a.yml
,客户端 service-b
对应的配置文件为 service-b.yml
,如果 service-a
和 service-b
都需要使用同一个数据源配置,岂不是要在 service-a.yml
和 service-b.yml
中同一个数据源配置写两遍?
重复意味着容易出错和那以维护。
目前我能搜罗到的方案有两种,示例中暂不考虑环境 profile
的情况(实际使用时对应加上 profile
即可)
一、方案一
在 配置仓库
的 根目录
加 application.yml
,Spring-Cloud-Config-Server
支持这种方式。
详见官方文档:Sharing Configuration With All Applications
当我们使用 Quick Start 中的那些 endpoint
访问时会发现,全局的配置
会与 客户端独有的配置
合并。
二、方案二
公共的配置文件独立出来,客户端在 spring.application.name
中多指定一个公共配置的名称(理论上在 spring.profiles.include
指定包括公共配置的名称也是可以的)。
比如在 配置仓库
根目录下创建一个 datasorce.yml
公共配置文件用来存放数据源配置,然后在各个客户端的 bootstap.yml
配置文件中指定。
例如:
service-a
客户端的 bootstap.yml
:
spring:
application:
name: service-a, datasorce
service-b
客户端的 bootstap.yml
:
spring:
application:
name: service-b, datasorce
理论上在 spring.profiles.include
指定包括公共配置的名称也是可以的,未测试结果不详:
例如:
service-a
客户端的 bootstap.yml
:
spring:
application:
name: service-a
profiles:
include: datasorce
service-b
客户端的 bootstap.yml
:
spring:
application:
name: service-b
profiles:
include: datasorce