使用Spring Cloud Config处理多个环境中通用应用程序配置的最佳方法

时间:2018-11-07 18:34:15

标签: git spring-boot configuration puppet spring-cloud-config

在使用Spring Cloud Config之前,我的团队使用Puppet在多个不同环境(开发,测试,preprod,prod)中进行应用程序配置。我们的场景是典型的场景:应用程序之间的通用属性以及所有环境之间组合的特定属性。

为了处理基于环境的同一配置属性的所有可能的不同值,以及同一环境中多个应用程序共享的那些配置属性,我们提出了一种定义“公共”配置的方法每个环境中包含所有可能的“替换”值(我们将其称为“令牌”)的文件。

因此,例如,让我们在“开发”环境中有5个应用程序共享2个数据库URL。我们将使用以下“令牌”创建以下“公共”配置文件:

databaseX.url = jdbc:url:.......
databaseY.url = jdbc:url:.......

然后,对于每个应用程序,我们将定义其自己的配置属性文件,在其中定义占位符,该占位符将由“公共”配置文件中的匹配标记替换。因此,例如,这将是App1的配置属性文件:

app.name = App1
property1 = value1
property2 = value2
...
database.url = ${databaseX.url}

这是App2的

app.name = App2
property3 = value3
property4 = value4
...
database.url = ${databaseY.url}

明白了吗?使用这种方法,我们可以在每个环境中维护一个全局的“公共”配置属性文件,其中每个单独的应用程序都可以决定选择哪个属性,而Puppet只需将其替换为特定的“令牌”即可。 请注意,Puppet仅会替换请求的“令牌”,而不是完整的“ common”配置属性文件。

但是,当迁移到Spring Cloud Config时,我还没有弄清楚如何实现此方法,因为它具有一个“公共”配置属性文件(就Spring Cloud Config的层次结构而言,是顶级application.yaml)总是会导致将application.yaml中定义的所有属性复制到所有应用程序中,因此每个单独的应用程序最终都具有许多不需要的属性(并带来了安全性) /隐私问题)。

因此,Spring Cloud Config中存在一种机制,通过该机制,我可以仅当在应用程序配置中定义了父对象的对应占位符时替换父对象的属性,并因此丢弃其余属性,而不能明确要求作为占位符?

该方法类似于资源过滤器插件对Maven的作用

https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

我希望听到人们已经通过Spring Cloud Config解决了这个问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

最终,profiles的使用使我们获得了预期的行为。