zoukankan      html  css  js  c++  java
  • 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-aservice-bconfig/ 目录下的配置文件,配置如下:

    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包。

    关注 + 收藏, 分享更多的开发实战经验。

  • 相关阅读:
    我的Java学习推荐书目
    BTrace使用简介
    BTrace使用小结
    如何在生产环境使用Btrace进行调试
    BTrace : Java 线上问题排查神器
    淘宝Tprofiler工具实现分析
    JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码
    性能工具TProfiler介绍文档
    分布式系统理论基础
    微信小程序
  • 原文地址:https://www.cnblogs.com/werewolfBoy/p/13973036.html
Copyright © 2011-2022 走看看