从spring application.yml文件中读取env变量,以便在云代工厂上进行应用程序部署

时间:2018-01-13 18:02:16

标签: java spring keycloak pivotal-cloud-foundry

我在云代工厂部署了keycloak作为应用程序,我有另一个应用程序作为spring boot应用程序,在application.yml文件上有URI keycloak。

如何设置在keycloak应用程序环境变量(VCAP_APPLICTION)上定义的此URI的值?我发现的所有例子都是关于

如何访问"服务"来自属性文件的环境变量而不是"应用程序"环境变量

application.yml文件是这样的:

rpt-verification-url: ${cloud.app.keycloak.uris[0]}

2 个答案:

答案 0 :(得分:1)

您提及另一项服务的uri,通过属性文件传入。这是云原生开发的反模式。

您的应用所依赖的keycloak应用程序的uri,不在您的控制之下。 keycloak应用程序可能会崩溃,并且可以在pcf中启动新实例。或者,某些人可以扩展应用实例。

云原生世界的方法是使用Spring Cloud Services Service Discovery(又名Netflix Eureka)模式。这是指向service discovery的链接。

要传递运行时属性,请使用Spring Cloud Services中的Config Server。

这是假设,您的keycloak应用程序已部署并在PCF上运行。

如果它在PCF外部,您应该在PCF上查看用户提供的服务(CUPS)或Service Broker。

答案 1 :(得分:0)

您可以使用命令cf set-env为您的应用程序设置任何环境变量。如果您的应用程序被调用myapp,则下面的命令应该允许您设置环境变量。

set env myapp RPT_VERIFICATION_URL https://urltokeycloack

SpringBoot支持外部化配置,如docs中所述。因此,如果为进程设置OS环境变量,其名称与YAML文件或.properties文件中的属性名称相同,则SpringBoot将读取该文件。 cf set-env允许您为在Cloud Foundry上运行的应用程序设置环境变量。

您还可以使用cf push在manifest.yml文件中设置环境变量。

另一个选择是使用spring cloud配置服务器并将所有app配置文件外部化为git repo。这是K.AJ答案中建议的最佳长期解决方案,但是如果您想要快速获得并快速运行,可以使用cf set-env