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