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

时间:2019-02-03 12:35:22

标签: spring-boot microservices netflix-eureka netflix-zuul spring-cloud-config

我想对多个微服务使用一个通用的应用程序属性文件,这些文件将具有一些常见的配置,例如DB Source config等。我已经将config Server与Eureka服务器和zull代理一起使用。

问题:

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

以相同的方式向zuul代理注册服务时,也需要使用相同的应用程序名称将服务路径配置为zuul.routes.xyz.path = / iii/*。

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

我是Spring Boot微服务的新手。

2 个答案:

答案 0 :(得分:3)

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'}]}

答案 1 :(得分:0)

我想指出的是,所提供的解决方案利用“ 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 !这与我希望从文件名称 a和b 提供我的属性完全不一样!因此,我们滥用属性语义,从我们希望使用的文件名中管理配置服务器服务。

但是,由于spring.config.client.name的实际语义,配置服务器将提供适用于一切的内容

  • / a [-profile]。*
  • / b [-profile]。*
  • / a / {适用名称}
  • / b / {适用名称}

这里的 caveat 是,我们仅针对根目录实现了我们想要的功能,此外,如果我们有一个配置服务器来服务多个springboot应用程序,那么我们将无法在我们的所有属性下使用应用程序的名称文件夹。

更糟糕的是,如果还有另一个应用(或将来会出现-注意!-)与我们期望的属性之一同名文件名,配置服务器将开始为我们的应用 ALL 提供服务,该应用是为其他应用定义的配置!这可能最终导致错误甚至有害的服务配置!

(我重复一遍,它将在/ { other-app-name-that-i-happened-to-use-as-filename中使用的 一切 -and-defined-it-through-spring.config.client.name } / * !!!)

所以提防使用这种方法时要小心!

我已经发布了pull request for spring-cloud-config-server 1.4.x,它支持通过 spring.cloud.config.server.searchNames 环境属性定义其他文件名,在同一种意义上,文档的Externalized Configuration.Application Property Files部分中定义的单个springboot应用程序,它使用 spring.config.name 环境属性。希望他们尽快复查