我在云代工厂部署了keycloak作为应用程序,我有另一个应用程序作为spring boot应用程序,在application.yml文件上有URI
keycloak。
如何设置在keycloak应用程序环境变量(VCAP_APPLICTION)上定义的此URI
的值?我发现的所有例子都是关于
如何访问"服务"来自属性文件的环境变量而不是"应用程序"环境变量。
application.yml文件是这样的:
rpt-verification-url: ${cloud.app.keycloak.uris[0]}
答案 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