我正在尝试迁移我们稳定的应用程序服务器以从 Spring Cloud Config 服务器获取它们的配置。每个应用程序在配置服务器上都有一个
{my-app}.yml
文件,我们可以使用配置文件(在名为 {my-app}-{profile}.yml
的文件中或使用多配置文件 YAML 文档)为每个应用程序的每个环境设置不同的配置,我们甚至可以包含一个配置文件在另一个使用 spring.profiles.include
提供某种继承 - 到目前为止,这么好。
但是,我们只能在彼此中包含来自同一个应用程序的配置文件,并且我们有几个应用程序从同一个配置服务器配置,每个环境共享很多配置——例如,它们几乎都使用相同的数据源配置连接到同一个数据库,同样用于消息传递、缓存等。这是很多重复的配置和很多需要更改的地方——这正是 Spring Cloud Config 应该避免的!
有没有办法在 Spring Cloud Config 服务器中“包含”(通过配置文件或其他方式!)共享配置属性跨应用程序?
更新
除了下面@vladsfl 的正确答案外,请注意,如果您使用配置服务器上的本机配置文件从文件系统或类路径而不是 git 存储库提供配置,配置服务器将使用 application.yml 及其配置文件自身的变体,但拒绝将它们提供给其他应用程序。解决方案是使用
spring.cloud.config.server.native.searchLocations
从不同的位置拉取服务配置。
是的。你可以在你的配置服务器上有
application.yml
或 application-<profile>.yml
,现在每个使用这个配置服务器的应用程序都将继承 application.yml
中的所有设置。每个以特定配置文件运行的应用程序都将继承 application-<profile>.yml
. 的设置
可能已经太晚了,但万一其他人正在为同样的问题而苦苦挣扎,最终的解决方案如下:
您可以根据需要在 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.ymlsettings
将加载 settings.yml如果你想跨环境保持配置文件简单,试试mergeconfigs,它旨在支持合并多个配置文件并方便本地开发。