SpringCloud 如何提取公共配置
SpringCloud 提取公共配置
在开发微服务项目时,通常会有很多服务,此时会用配置中心来管理这些服务的配置,但有些服务可能会有相同的配置,比如数据源配置,eureka server注册中心地址配置,actuator开放端口配置等,很多的服务都需要,如果每个服务都写一份这样相同的配置,服务一多,也挺麻烦的,并且如果要换一个数据库或注册中心,每个服务都得改,很麻烦,所以就需要将这些公共的配置提取出来,放到公共的配置文件中,而这些服务去引用这些配置即可。
原本服务的配置文件可能是这样的:
spring: application: name: eureka-client cloud: config: uri: http://localhost:8888 #配置中心地址 label: master profile: dev
此时服务默认会去config找名字为eureka-client-dev.yml的配置文件,这个配置文件里可能有eureka server地址,数据源配置,redis配置等,而另一个服务的配置文件可能也有这些相同的配置,这时就可以将这些相同的配置提取出来,放到多个配置文件中,让服务去读取这些配置文件,比如可能有base-dev.yml来放各个服务公共的配置,datasource-dev.yml来存放数据源配置,而eureka-client-dev.yml是这个服务独有的配置,这些配置文件都在config server中,则服务的工程中的配置文件则可以改成这样:
spring: application: name: eureka-client cloud: config: uri: http://localhost:8888 #配置中心地址 label: master profile: dev name: eureka-client,base,datasource
这样eureka-client服务就会去配置中心读取这3个配置文件,其他的服务如果需要,直接在自身的配置中在spring.cloud.config.name属性中添加文件名即可,而不用再写相同的配置了。
SpringCloud 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包。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringMVC框架和SpringBoot项目中控制器的响应结果深入分析
这篇文章主要介绍了SpringMVC框架和SpringBoot项目中控制器的响应结果,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧2022-12-12java多线程join()方法的作用和实现原理解析(应用场景)
join方法主要是用于将当前线程挂起,等待其他线程结束后在执行当前线程,本文通过应用场景分析代码示例讲解java多线程join()方法的作用和实现原理,感兴趣的朋友一起看看吧2021-07-07实例解析Json反序列化之ObjectMapper(自定义实现反序列化方法)
这篇文章主要介绍了实例解析Json反序列化之ObjectMapper,json自定义序列化的方法,需要的朋友可以了解下。2017-09-09关于idea-web.xml版本过低怎么生成新的(web.xml报错)问题
今天通过本文给大家分享idea-web.xml版本过低怎么生成新的(web.xml报错)问题,通过更换web.xml版本解决此问题,感兴趣的朋友跟随小编一起看看吧2021-07-07
最新评论