多个微服务的通用应用属性文件

Common application property file for multiple microservice

我想为多个微服务使用一个通用的应用程序属性文件,它将有一些通用的配置,如数据库源配置等。我已经将配置服务器与 Eureka 服务器和 zull 代理一起使用。

问题:

使用configServer时我们需要提供spring.application.name = 'xyz' 依次找到此微服务配置的 xyz.properties。

同理我们在zuul proxy注册服务时也需要相同的应用名来配置服务路径zuul.routes.xyz.path = /iii/*.

现在我希望多个服务共享同一个 属性 文件(xyz.properties),但还需要注册 zuul 路由,因此我必须为每个服务提供不同的名称。如果我为每项服务提供不同的名称,他们将无法找到相同的 属性 文件。

我是 spring 启动微服务的新手。

spring.config.client.name支持多个名称以逗号分隔加载配置属性。

在这种情况下,将公共属性存储在 common.yml 中,将 xyz 属性存储在 xyz.yml 中。最后提一下spring.cloud.config.name: xyz,common

spring:
  cloud:
    config:
      uri: http://localhost:8888
      name: xyz,common

输出:

Fetching config from server at : http://localhost:8888
Located environment: name=xyz,common, profiles=[default], label=null, version=91edcf96c6a88707bf39014a16ad5d301d6b4575, state=null
Located property source: CompositePropertySource {name='configService', propertySources=[MapPropertySource {name='configClient'}, MapPropertySource {name='https://github.com/BarathArivazhagan/config-server-repository/common.yml'}, MapPropertySource {name='https://github.com/BarathArivazhagan/config-server-repository/xyz.yml'}]}

我想指出,提供的解决方案利用 "spring.config.client.name" 客户端 属性 语义来实现 配置服务器application[-profile].* 和 {appname}[-profile] 以外的多个文件提供属性文件的行为.*

但是,请注意,对于一个简单的情况并考虑一个根目录,配置服务器提供来自该根目录中定义的文件或名称为应用程序,其下的 属性 个文件对应,即 */{appname}/application[-profile].** 或 */{appname}/{appname}[-profile].**

spring.config.client.name”环境 属性 指示配置服务器应用程序名称 请求应用匹配和。这意味着给定 spring.config.client.name=a,b ,配置服务器将采用为应用程序定义的服务属性 (带有名称)a 和 b 到请求的应用程序!这与我希望从 file names a 和 b 提供我的属性不完全相同!因此,我们 滥用 属性 语义来管理我们的配置服务器服务于我们想要的文件名。

但是,由于 spring.config.client.name 的实际语义,配置服务器将提供从

开始适用的所有内容
  • /a[-个人资料].*
  • /b[-个人资料].*
  • /a/{适用名称}
  • /b/{适用名称}

这里的 警告 是我们只在根目录上实现了我们想要的,此外,如果我们有一个服务于多个 springboot 应用程序的配置服务器,我们就失去了拥有的能力我们应用程序名称文件夹下的所有属性。

更糟糕的是,如果存在另一个应用程序(或者-注意!-将来会存在)与我们想要的 属性 文件名之一同名 ,配置服务器将开始为我们的应用服务 ALL 其他 应用程序定义的配置!!!这可能会导致错误甚至有害的服务配置!

(我重复一下,它将提供 一切 适用于 /{other-app-name-that-i -碰巧用作文件名并通过-spring.config.client.name}/*!!!)

所以在尝试这种方法时要小心!

我已经发布了文档的 pull request for spring-cloud-config-server 1.4.x, that supports defining additional file names, through a spring.cloud.config.server.searchNames environment property, in the same sense one can do for a single springboot app, as defined in the Externalized Configuration.Application Property Files 部分,使用 spring.config.name 环境 属性。希望他们尽快审核