在Pivitoal Cloud Foundary中,是否可以为每个空间设置SPRING_PROFILES_ACTIVE?

时间:2019-01-03 02:05:21

标签: spring-boot pivotal-cloud-foundry

对于使用Pivotal Cloud Foundry(PCF)的组织中的每个空间,是否可以为每个空间设置SPRING_PROFILES_ACTIVE?

  • space1:SPRING_PROFILES_ACTIVE:开发中
  • space2:SPRING_PROFILES_ACTIVE:性能
  • space3:SPRING_PROFILES_ACTIVE:生产
  • 等...

谢谢, 布莱恩

1 个答案:

答案 0 :(得分:1)

在Cloud Foundry上设置Spring配置文件的主要方法是通过环境变量。

Cloud Foundry无法提供一种按组织或空间设置环境变量组的方法。您只能设置适用于所有登台或所有正在运行的应用程序的登台和正在运行的环境变量组。这是用于在应用程序上设置环境变量的标准工具的补充。


我认为您可能可以使它正常工作,但是需要一些努力。这是主意。

  1. 创建一个自定义buildpack(不要惊慌,这并不困难)。 buildpack的唯一责任是创建一个包含.profile.d/的{​​{1}}脚本(只是常规的Bash脚本)。

    任何buildpack都可以创建export SPRING_PROFILES_ACTIVE=<some-profile>脚本,这些脚本主要用于配置环境变量。在启动任何应用程序之前,这些脚本由环境自动提供。因此,如果buildpack在此处设置.profile.d/,它将对您的应用可用并生效。

    https://docs.cloudfoundry.org/buildpacks/custom.html#contract

    您只需要创建下面的链接中定义的SPRING_PROFILES_ACTIVEbin/supply脚本。 bin/detect是创建bin/supply脚本的逻辑所在,而.profile.d/可以像bin/detect一样简单,它将告诉脚本始终运行。

    https://docs.cloudfoundry.org/buildpacks/understand-buildpacks.html#buildpack-scripts

  2. 您的自定义buildpack可能与要使用的硬编码配置文件一样简单,也可能看起来很漂亮,请查看包含空间名称的exit 0环境。

    例如:VCAP_APPLICATION

    然后,给定空间名称,buildpack可以应用逻辑来设置正确的配置文件。我认为组织名称不是在阶段/运行时可用于应用程序的,至少不能通过环境变量提供,因此,基于此名称应用逻辑将更加困难。

  3. 最后一步是使用CF的multi-buildpack支持。您的自定义buildpack将是供应商buildpack,因此它将是第一,然后您将列出实际的buildpack,然后在推送应用程序时使用。

    例如:echo $VCAP_APPLICATION | jq .space_name

    https://docs.cloudfoundry.org/buildpacks/use-multiple-buildpacks.html

希望有帮助!