使用Spring Cloud Config进行属性版本控制

erg*_*mes 8 versioning spring-boot spring-cloud spring-cloud-config

我可能在这里遗漏了一些东西,但是什么是属性版本控制的好方法?

例如,在具有属性值更改的蓝绿色部署方案中(旧应用程序版本消耗旧值,新版本需要新值),如何确保应用程序的两个版本可以成功共存(考虑可能的重新启动和回滚)?

一种选择是为需要应用新值的属性创建新的属性名称.当然,这不是一个好的选择,因为我们需要在代码库中跟踪该属性的所有用法并相应地更新其引用.从概念的角度来看,它也不是很好.

另一种选择是为每个版本分配一个分支.虽然这对于这种情况可以很好地工作,但我设想一个分支/标记地狱,因为我们扩展到配置仓库到多个应用程序,它们各自的分支演变成不同的方向.

分支机构的解决方案是为每个应用程序分配一个配置存储库.但是,我认为这在某种意义上会破坏配置服务器的目的,因为它增加了开销.

还有其他方法吗?

Ali*_*ani 9

Spring Cloud Config的Environment资源由三个变量参数化:

  1. {application}映射到spring.application.name客户端
  2. {profile}映射到spring.active.profiles客户端
  3. {label}这是标记一组版本化配置文件的服务器端功能.

由于在Blue-Green部署的情况下,您在同一个配置文件中使用相同的应用程序,最好的选择是使用git 标签使用Versioned配置文件.

其基本思想是创造不同版本的配置文件标签,并告诉您的应用程序使用涉及使用特定的标记配置spring.cloud.config.labelbootstrap.properties.

例如,您可以使用v1.0和标记两个不同的提交v2.0:

在此输入图像描述

spring.cloud.config.label=v1.0用于旧实例和spring.cloud.config.label=v2.0新实例.

当我们扩展到配置repo到多个应用程序和他们各自的分支演变到不同的方向.

为了避免这个问题,我建议只在application-{profile}.properties配置文件中保存常用和跨应用程序属性.更好的方法是每个应用程序都有自己的配置文件,例如recommender.properties用于推荐服务和search.properties搜索服务.然后,您可以通过定义适当的属性为每个属性使用特定于配置文件和版本化的属性spring.application.name.这样,您就可以在配置文件中达到某种程度的单一责任原则.