Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 多个微服务的公共应用程序属性文件_Spring Boot_Microservices_Netflix Eureka_Netflix Zuul_Spring Cloud Config - Fatal编程技术网

Spring boot 多个微服务的公共应用程序属性文件

Spring boot 多个微服务的公共应用程序属性文件,spring-boot,microservices,netflix-eureka,netflix-zuul,spring-cloud-config,Spring Boot,Microservices,Netflix Eureka,Netflix Zuul,Spring Cloud Config,我想为多个微服务使用一个公共应用程序属性文件,这些微服务将具有一些公共配置,如DB Source config等。我已将配置服务器与Eureka服务器和zull代理一起使用 问题: 使用configServer时,我们需要提供spring.application.name='xyz' 进而查找此微服务配置的xyz.properties 同样,当我们向zuul proxy注册服务时,也需要使用与zuul.routes.xyz.path=/iii/*相同的应用程序名称来配置服务路径 现在我希望多个服

我想为多个微服务使用一个公共应用程序属性文件,这些微服务将具有一些公共配置,如DB Source config等。我已将配置服务器与Eureka服务器和zull代理一起使用

问题:

使用configServer时,我们需要提供spring.application.name='xyz' 进而查找此微服务配置的xyz.properties

同样,当我们向zuul proxy注册服务时,也需要使用与zuul.routes.xyz.path=/iii/*相同的应用程序名称来配置服务路径

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


我是spring boot micro services的新手。

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”客户端属性语义来实现一种配置服务器行为,即从多个文件提供属性文件,而不是应用程序[-profile].*和{appname}[-profile]*

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

“spring.config.client.name”环境属性指示请求应用程序与之匹配的配置服务器。这意味着给定一个spring.config.client.name=ab,配置服务器将假定为请求应用程序提供为应用程序定义的属性(带名称)a和b!这与我希望从文件名a和b提供我的属性不同!因此,我们正在滥用属性语义,从我们希望的文件名管理配置服务器服务

然而,由于spring.config.client.name的实际语义,配置服务器将从

  • /[-profile].*
  • /b[-profile].*
  • /a/{适用名称}
  • /b/{适用名称}
这里的警告是,我们只实现了根目录所需的功能,而且,如果我们有一个为多个springboot应用程序提供服务的configserver,那么我们就无法将所有属性都放在应用程序的名称文件夹下

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

(我重复一遍,它将通过spring.config.client.name提供/{other-app-name-that-I-occurrent-to-use-as-filename-and-defined-it-through-spring.config.client.name}/*!!!)

因此,在使用这种方法时要小心


我已经发布了一个支持通过spring.cloud.config.server.searchNames环境属性定义其他文件名的,与使用spring.config.name环境属性对单个springboot应用程序所做的相同。我希望他们能尽快对其进行审查

作为spring云配置的一部分,可以提供多个配置名称。例如xyz.properties,common.properties。配置spring.config.client.name=xyz,公共。现在,您可以使用common作为任何service@Barath.. 我已经对spring.application.name=xyz进行了注释,并添加了spring.config.client.name=xyz,common。。。现在应用程序无法启动,因为它无法找到启动属性(DB属性)…是否可以共享您的项目?我在这里共享了一个示例,谢谢@Barath。。。知道了。。。