Spring Cloud Config 多服务公共配置
2018-11-16 本文已影响0人
AaronSimon
一、问题描述
使用Spring Cloud config作为配置中心,其它服务均从配置中心获取配置信息。有这样一个场景,如果多个服务的配置存在公共配置(例如数据库连接配置等),那么可不可以只在公共的文件中配置就可以呢?是可以的,下面提供两种解决方案。
涉及到的服务如下:
服务名 | 端口号 | 说明 |
---|---|---|
eureka | 8080 | 服务注册中心 |
config | 8090 | 配置中心 |
serviceA | 8091 | service a |
serviceB | 8092 | service b |
二、解决方案
2.1 方案1
这里配置中心使用本地管理所有服务的配置文件。在资源目录下新建/serviceConfig
目录,在该目录下新建
aplication.properties
,serviceA-dev.properties
和serviceB-dev.properties
文件。aplication.properties
用来存放公共配置。
在serviceA和serviceB中分别添加如下配置:
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=config-server
spring.cloud.config.profile=dev
spring.cloud.config.failFast=true
注意:
存放所有服务配置文件的目录不能命名为config
。因为配置中心在启动的时候会优先读取config
子目录下的application.properties
,Spring Boot
提供的SpringApplication
类会搜索并加载config
目录下的application.properties
文件来获取配置属性值。
2.2 方案2
可以添加spring.cloud.config.name
来配置多个文件名。如果公共配置文件的名称为common.properties
,那么在serviceA中的配置如下:
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=config-server
spring.cloud.config.profile=dev
spring.cloud.config.failFast=true
spring.cloud.config.name=common,serviceA
三、测试
不管是哪种方案,待服务启动后,你看到类似如下日志,证明配置生效
CompositePropertySource [name='config', propertySources=[MapPropertySource [name='classpath:/serviceConfig/serviceA-dev.properties'], MapPropertySource [name='classpath:/serviceConfig/application.properties']]]