Spring Cloud

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.propertiesserviceA-dev.propertiesserviceB-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.propertiesSpring 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']]]
上一篇下一篇

猜你喜欢

热点阅读