我想为多个微服务使用一个通用的应用程序属性文件,它将有一些常见的配置,如DB Source配置等。我已经使用配置服务器与Eureka服务器和zull代理。
问题:
当使用configServer时,我们需要提供spring.application.name ='xyz',然后为这个微服务配置找到xyz.properties。
当我们使用zuul代理注册服务时,同样的方式也需要相同的应用程序名称来配置服务路径为zuul.routes.xyz.path = / iii / *。
现在我希望多个服务将共享相同的属性文件(xyz.properties),但也需要注册zuul路由,所以我必须为每个服务提供不同的名称。如果我将为每个服务提供不同的名称,他们将无法找到相同的属性文件。
我是春季启动微服务的新手。
spring.config.client.name支持用逗号分隔的多个名称来加载配置属性。
在这种情况下,将公共属性存储在xyz.yml中的common.yml和xyz属性中。最后,提到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”客户端属性语义来实现从应用程序[-profile]。*和{appname以外的多个文件提供属性文件的配置服务器行为。 }[-轮廓]。*
但是,请注意,对于一个简单的情况并考虑根目录,配置服务器提供来自此根目录中或在具有应用程序名称的文件夹下定义的文件的属性,其下的属性文件对应于,即* / { appname} / application [-profile]。**或* / {appname} / {appname} [ - profile]。**
“spring.config.client.name”环境属性指示配置服务器请求应用程序匹配哪些应用程序名称。这意味着给定一个spring.config.client.name = a,b,配置服务器将假定为app(带名称)a和b定义的服务属性到请求应用程序!这与我希望从文件名a和b提供的属性完全相同!因此,我们滥用属性语义来管理我们希望的文件名来配置服务器。
但是,由于spring.config.client.name的实际语义,配置服务器将提供适用的所有内容
这里需要注意的是,我们只实现了我们想要的根目录,而且,如果我们有一个服务于多个springboot应用程序的配置服务器,我们就无法在应用程序的名称文件夹下拥有所有属性。
更糟糕的是,如果存在另一个应用程序(或 - -ttention! - 将来会存在)与我们所需的属性文件名称相同的名称,配置服务器将开始为我们的应用程序提供所有为该其他应用程序定义的配置!这可能最终导致错误甚至有害的服务配置!
(我再说一遍,它将提供适用于/{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环境属性定义其他文件名,就像一个springboot应用程序一样,可以在文档的Externalized Configuration.Application Property Files部分中定义,使用spring.config.name环境属性。我希望他们尽快复习