当前位置: 首页 > 知识库问答 >
问题:

Spring Cloud Config Server在本机模式下不提供特定于应用程序的属性

袁文景
2023-03-14

我有一个Spring Cloud Config Server v3.0.5,它从Git存储库提供配置属性,如下所示:

|
|-- foo-service/
|   |-- application.yml
|-- bar-service/
|   |-- application.yml
|-- application-common.yml
|-- application-kafka.yml
|-- ...

如您所见,每个微服务都有一个子目录,其中包含特定于应用程序的配置,以及根目录中的一些常见配置,我们可以通过配置文件(common,kafka等)获取这些配置。

因此,例如,我们可以获取特定于应用程序和/或特定于配置文件的配置属性,如下所示:

# Successfully returns application-specific properties
curl http://<CONFIG_SERVICE_URL>/foo-service-application.yml
# Successfully returns application-specific + common + kafka properties
curl http://<CONFIG_SERVICE_URL>/foo-service-application,common,kafka.yml

但是,在开发过程中,我们希望使用基于本地文件的存储库,这样我们就不需要提交每个配置更改并在本地轻松地进行测试。

因此,在配置服务器中,我将活动配置文件设置为本机,并将spring.cloud.config.server.native.search-locations设置为相同的存储库路径。

但当我尝试获取特定于应用程序的配置(即子目录中的配置文件)时,它返回空:

# This returns empty response:
curl http://<CONFIG_SERVICE_URL>/foo-service-application.yml
{}

# This returns only profile-specific configs but **omits** foo-service applcations configs:
curl http://<CONFIG_SERVICE_URL>/foo-service-application,common,kafka.yml
...

我在这里错过了什么?为什么它不能同时返回特定于应用程序的属性?我是否必须为配置服务器设置另一个配置?

任何帮助都是感激的。谢谢。

共有1个答案

萧建木
2023-03-14

好的,我终于找到了!
显然,我们需要在spring.cloud.config.server.native.search位置属性中显式指定带有应用程序占位符的子目录,这是IMO在文档中模糊描述的:

搜索位置可以包含{应用程序}、{个人资料}和{标签}的占位符。这样,您可以分离路径中的目录,并选择对您有意义的策略(例如每个应用程序的子目录或每个配置文件的子目录)。

因此,在我的例子中,我必须将< code>search-locations定义为:

spring:
  cloud:
    config:
      server:
        native:
         search-locations:
          - /path/to/config/repo
          - /path/to/config/repo/{application}

现在,它可以正确地提供特定于应用程序和特定于配置文件的配置属性。

虽然这对我的情况已经足够了,但我仍然不知道为什么基于文件的方法和基于git的方法有这么大的差异(即,为什么我们应该在基于文件的方式中显式地为特定于应用程序的配置设置子目录,而在基于git方式中它可以自动为它们提供服务?)

 类似资料:
  • 我们正在将ruby微服务迁移到kubernetes,我们过去在中保存特定于环境的配置。使用kubernetes,您可以为每个服务创建特定于环境的文件,例如等。 虽然kubernetes的pod配置文件能够保存环境变量,但您似乎不能在其中保存结构化数据。 例如,在中,我们有 在kubernetes中继续这种实践并在中打破环境是否合理,或者kubernetes是否有一些其他的最佳实践来为POD提供结构

  • 我没有做任何更改,我只是运行“CreateReact应用程序客户端”,然后一切正常运行,我将cd放入目录并运行“ThreadStart”。然后我有两个问题:1)它说“有些东西已经在3000端口上运行了”。不幸的是,当我使用lsof和netstat时,端口3000上没有运行任何东西。我说在不同的端口上运行,然后它会尝试为应用程序提供服务。2) 新港口没有提供任何服务。浏览器将打开,控制台不会给出任何

  • 我正在寻找解决这个问题的方法。 我有几个属性文件(application.properties、application realdb.properties)。假设我从“realdb”spring概要文件开始。现在,我想在部署到tomcat上时重写我的属性。我决定将文件放在/lib文件夹中,因为它自动位于类路径上,我没有找到更好的(即特定于应用程序的类路径文件夹) 所以我可以在那里申请。属性,只要我

  • 我正在使用SpringDoc1.4和Spring-Boot2.3,在OperationCustomizer类中,我需要从应用程序属性文件中读取值。但每次都将字段初始化为。规格如下 应用程序.属性 OperationCustomizer类

  • 我正在尝试将我们的存储库从SVN迁移到Git,我在一个非常大的项目中遇到了发布插件的问题。 问题: 这个项目有大约50个子模块,它试图将所有修改后的pom添加为一个git add -- '. 这打破了windows命令行的限制。 幸运的是,在maven-scm-提供者-gitexe的版本1.8.1中对此进行了修复,但是maven-resess-plugin目前设置为使用1.7,但没有修复。 我尝试

  • 我们有一个websphere应用程序服务器,其中部署了多个应用程序。所有应用程序都使用一个公共属性(Key),但具有不同的Value。例如:spring.profiles。active=在一个应用程序spring.profiles中测试。active=其他应用中的UAT。在Websphere启动期间,是否可以将这些不同的值传递给应用程序? 如果我们在通用JVM参数输入框的JVM选项中设置这些值,那