Java 在Spring云配置服务器中包含多个应用程序的公共配置
我正在尝试迁移我们稳定的应用程序服务器,以从SpringCloudConfig服务器获取它们的配置。每个应用程序在配置服务器上都有一个Java 在Spring云配置服务器中包含多个应用程序的公共配置,java,spring,spring-boot,spring-cloud,spring-cloud-config,Java,Spring,Spring Boot,Spring Cloud,Spring Cloud Config,我正在尝试迁移我们稳定的应用程序服务器,以从SpringCloudConfig服务器获取它们的配置。每个应用程序在配置服务器上都有一个{my app}.yml文件,我们可以使用配置文件(在名为{my app}-{profile}.yml的文件中或使用多配置文件YAML文档)为每个应用程序的每个环境进行不同的配置,我们甚至可以使用spring.profiles.include将一个概要文件包含在另一个概要文件中,以提供某种类型的继承—到目前为止,还不错 但是,我们只能在彼此中包含来自同一应用程序的
{my app}.yml
文件,我们可以使用配置文件(在名为{my app}-{profile}.yml的文件中或使用多配置文件YAML文档)为每个应用程序的每个环境进行不同的配置,我们甚至可以使用spring.profiles.include
将一个概要文件包含在另一个概要文件中,以提供某种类型的继承—到目前为止,还不错
但是,我们只能在彼此中包含来自同一应用程序的配置文件,并且我们从同一配置服务器配置了多个应用程序,这些应用程序在每个环境中共享大量配置文件-例如,它们几乎都使用相同的数据源配置连接到同一数据库,同样用于消息传递、缓存等。这是大量重复的配置,需要更改的地方很多——这正是SpringCloud配置应该避免的
有没有办法在SpringCloudConfigServer中跨应用程序“包括”(通过配置文件或其他方式!)共享配置属性
更新
除了下面@vladsfl给出的正确答案之外,如果您使用配置服务器上的本机配置文件从文件系统或类路径而不是git repo提供配置,那么配置服务器将使用application.yml及其配置文件变体,但拒绝将其提供给其他应用程序。解决方案是使用spring.cloud.config.server.native.searchLocations
从其他位置提取服务配置。是。您可以在配置服务器上安装application.yml
或application-.yml
,现在使用此配置服务器的每个应用程序都将继承application.yml
中的所有设置。在特定配置文件中运行的每个应用程序都将从application-.yml
继承设置,可能已经太迟了,但如果其他人正在为相同的问题而挣扎,最终的解决方案如下:
您可以根据需要在配置服务器类路径下创建任意多个yml文件。即使选择了本机配置文件,也会向客户端应用程序提供。
前面没有提到的唯一一件事是,您应该告诉客户端应用程序也读取这些设置文件
以下是一个工作示例:
配置服务器文件结构:
客户端应用程序bootstrap.yml文件:
键是name:${spring.application.name},settings
,它告诉配置客户端从配置服务器加载以下设置:
${spring.application.name}
将加载config/auth service.yml
settings
将加载settings.yml
application-.yml
用一种奇怪的方式显示它,我想说application-.yml
。也适用于属性。谢谢-这对我不起作用的原因是,我在配置服务器上使用了“本机”配置文件,并从类路径加载,而不是从git存储库加载,它显式地将application-*.{yml | properties}从提供的配置中排除!“不过,你的回答促使我弄明白了这一点。”斯宾塞·吉布。我确实在那里输入了,但我猜它被剥离了。有没有办法更改该文件的名称?我的意思是将application.properties
的名称更改为something.properties
。
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