【问题标题】:Read env variable from spring application.yml file for app deployement on cloud foundry从 spring application.yml 文件中读取 env 变量以在 Cloud Foundry 上部署应用程序
【发布时间】:2018-06-22 21:20:48
【问题描述】:

我将 keycloak 部署为 cloud Foundry 上的应用程序,并且我有另一个应用程序作为 spring boot 应用程序,它在 application.yml 文件中具有 keycloak 的URI

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

如何从属性文件访问“服务”环境变量而不是“应用程序”环境变量

application.yml 文件是这样的:

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

【问题讨论】:

标签: java spring keycloak cloud-foundry


【解决方案1】:

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

您的应用所依赖的 keycloak 应用的 uri 不在您的控制范围内。 keycloak 应用程序可能会崩溃,并且可能会在 pcf 中启动一个新实例。或者,有人可以扩展应用程序实例。

云原生世界中的方法是使用 Spring Cloud Services 服务发现(又名 Netflix Eureka)模式。这是service discovery的链接。

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

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

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

【讨论】:

【解决方案2】:

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

set env myapp RPT_VERIFICATION_URL https://urltokeycloack

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

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

另一个选择是使用 spring cloud config server 并将所有应用程序配置文件外部化到一个 git repo 中。这是 K.AJ 的回答中建议的最佳长期解决方案,但是如果您想快速启动并运行某些东西,您可以使用 cf set-env

【讨论】:

    猜你喜欢
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    相关资源
    最近更新 更多