在Spring Cloud Config服务器中包含多个应用程序的通用配置配置服务器文件结构:Client application bootstrap.yml file:

我正在尝试迁移我们稳定的应用程序服务器,以便从Spring Cloud Config服务器获取其配置。每个应用程序在配置服务器上都有一个文件,我们可以使用配置文件(在命名的文件中或使用多配置文件YAML文档)为每个应用程序的每个环境提供不同的配置,我们甚至可以在另一个配置文件中包含一个配置文件,以提供某种继承 - 到目前为止,一切都很好。{my-app}.yml{my-app}-{profile}.ymlspring.profiles.include

但是,我们只能将来自同一应用程序的配置文件包含在彼此中,并且我们从同一配置服务器配置了多个应用程序,这些应用程序为每个环境共享大量配置 - 例如,它们几乎都使用相同的DataSource配置连接到同一数据库,同样用于消息传递,缓存等。这是很多重复的配置,很多地方需要改变 - 这正是Spring Cloud Config应该避免的!

有没有办法在Spring Cloud Config服务器中的应用程序中“包含”(通过配置文件或其他方式!)共享配置属性?

更新

除了下面@vladsfl的正确答案之外,如果您使用配置服务器上的本机配置文件从文件系统或类路径而不是 git 存储库提供配置,则配置服务器将使用 application.yml 及其配置文件变体,但拒绝将它们提供给其他应用程序。解决方案是用于从其他位置拉取服务的配置。spring.cloud.config.server.native.searchLocations


答案 1

是的。您可以在配置服务器上或配置服务器上,现在使用此配置服务器的每个应用程序都将继承 中的所有设置。在特定配置文件中运行的每个应用程序都将继承来自 的设置。application.ymlapplication-<profile>.ymlapplication.ymlapplication-<profile>.yml


答案 2

可能已经太晚了,但是如果其他人正在为同一问题而苦苦挣扎,最终的解决方案如下:

您可以根据需要在配置服务器类路径下创建任意数量的 yml 文件。即使它是在选定的本机配置文件中,也会向客户端应用程序提供。前面唯一没有提到的是,您应该告诉客户端应用程序也读取这些设置文件。

下面是一个工作示例:

配置服务器文件结构:

resources
|-config
   |-auth-service.yml - service specific configuration file
|-application.yml - config server settings
|-settings.yml - general settings file, planed to be loaded in every service

Client application bootstrap.yml file:

spring:
application:
  name: auth-service
cloud:
  config:
    username: "config-user"
    password: "config-password-1234"
    uri: "http://config-service:8888"
    name: ${spring.application.name}, settings

关键是告诉配置客户端从配置服务器加载以下设置:name: ${spring.application.name}, settings

  • ${spring.application.name}这将加载config/auth-service.yml
  • settings这将加载设置.yml

推荐