我尝试迁移稳定的应用服务器,以便从Spring Cloud Config服务器获取配置。每个应用程序在配置服务器上都有一个{my-app}.yml
文件,我们可以使用配置文件(在名为{my-app}-{profile}.yml
的文件中或使用多配置文件的YAML文档)为每个应用程序的每个环境配置不同的配置,我们可以甚至在另一个中使用spring.profiles.include
包含一个配置文件以提供某种继承 - 到目前为止,非常好。
但是,我们只能在相同的应用程序中包含配置文件,并且我们有几个应用程序从同一配置服务器配置,每个环境共享大量配置 - 例如,他们几乎都使用相同的DataSource配置连接到同一个数据库,同样用于消息传递,缓存等。这有很多重复的配置和许多需要更改的地方 - 正是Spring Cloud Config应该避免的!
有没有办法去"包括" (通过个人资料或其他方式!)在Spring Cloud Config服务器中跨应用共享配置属性?
更新
除了以下@vladsfl的正确答案之外,请注意如果您使用配置服务器上的本机配置文件从文件系统或类路径而不是git repo提供配置,配置服务器将使用应用程序。 yml及其自身的配置文件变体,但拒绝将其提供给其他应用程序。解决方案是使用spring.cloud.config.server.native.searchLocations
从其他位置提取服务配置。
答案 0 :(得分:8)
是。您可以在配置服务器上拥有application.yml
或application-<profile>.yml
,现在使用此配置服务器的每个应用程序都将继承application.yml
中的所有设置。在特定配置文件中运行的每个应用程序都将继承application-<profile>.yml
。
答案 1 :(得分:1)
可能已经为时已晚,但是如果其他人仍在同一个问题上挣扎,最终的解决方案如下:
您可以根据需要在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
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