解决spring-cloud-config 多服务共享公共配置的问题
问题描述
我们公司的项目是基于SpringCloud开发的微服务,用到了Spring-Cloud-Config作为微服务统一的配置中心,可以将散落在各个服务的配置进行统一配置管理。
虽然配置中心将各个应用的配置文件进行了统一管理, 但是涉及到的一些公共配置,比如数据库连接,redis连接,ftp连接等,依然还散落在各个应用的配置文件中,并没有抽取,我们需要根据环境的不同,而动态修改它们,非常难以维护。导致每次涉及修改这些公共配置,就非常老火。
所以想到了利用公共文件方法,现在在这里简单阐述一下如何配置。(下面例子Spring-Cloud-Config-Server都是使用本地配置方式)。
经过网上查阅资料,大部分都是采用方法一进行配置的,那么我提供了一个方式二配置,也许会让你眼前一亮,然后留下你的想法,如果是你去选择,会选择哪个方法呢?
方法一:
首先在配置中心的 config/
目录下创建一个公共配置文件common.yml
, 然后在各个应用下的 bootstrap.yml
文件中 spring.cloud.config.name
这里去配置多个配置文件名。
例如:
service-a 客户端的 bootstap.yml:
spring: cloud: config: name: service-a, common
service-b 客户端的 bootstap.yml:
spring: cloud: config: name: service-b, common
方法二:(比较推荐)
我们还记得springboot单体应用的时候, 是如何抽离公共配置呢?答案是用spring.profiles.include 进行引用其他公共配置文件。而且它的文件命名有个特点,就是必须是application-
开头的配置文件。
我们也会去想,像spring-cloud-config这样的配置集中化,这样的配置会生效吗?
例如:
首先,我们在 config/
目录下创建 application-common-dev.yml
配置文件
然后分别修改 service-a
和 service-b
在 config/
目录下的配置文件,配置如下:
service-a
客户端的 service-a-dev.yml
spring: application: name: service-a #公共配置文件 profiles: include: common-dev
service-b
客户端的 service-b-dev.yml
spring: application: name: service-b #公共配置文件 profiles: include: common-dev
分别启动各自的服务,就可以看到服务启动成功。
那么,这两种方式那种更好一些呢。
方法一:
缺点:如果有新加的公共配置文件,需要去每个服务的bootstrap.yml都去修改一下。并且需要重新发布jar包。
方法二:
优点:配置可以外部化,而且修改配置文件,不需要单独发布jar包。
到此这篇关于解决spring-cloud-config 多服务共享公共配置的问题的文章就介绍到这了,更多相关spring-cloud-config 公共配置内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!