14

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

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

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

更新

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

4

2 回答 2

14

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

于 2016-04-20T00:37:33.593 回答
5

可能已经为时已晚,但如果其他人正在努力解决同样的问题,最终的解决方案如下:

您可以根据需要在 config-server 类路径下创建任意数量的 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

客户端应用程序 bootstrap.yml 文件:

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这将加载settings.yml
于 2020-03-17T10:13:16.290 回答