我创建了一个用户提供的服务,如下所示:
cf cups myservice -p '{"db": "text"}'
我将此服务绑定到我的应用程序,服务名称为myservice
。
当我使用cf env命令时,我可以看到消息:
"user-provided": [{
"credentials":{
"db":"text"
},
"name":"myservice"
}]
但是当我用java
访问这个变量时System.getenv("cloud.services.myservice.db")
为空。为什么我无法访问db
值?
答案 0 :(得分:2)
当您在应用上执行cf env
时,您会看到一个名为VCAP_SERVICES
的环境变量,其中包含您所显示的JSON数据结构:
VCAP_SERVICES: {
"user-provided": [
{
"credentials":{ "db":"text" },
"name":"myservice"
}
]
}
您的应用程序可以使用System.getenv("VCAP_SERVICES")
检索此JSON结构。然后,您可以将从该调用返回的JSON解析为Map
,并检索所需的值。
您的应用名称cloud.services.myservice.db
没有可用的环境变量,因此System.getenv("cloud.services.myservice.db")
不会返回任何有用的内容。
Spring Boot解析VCAP_SERVICES环境变量并创建Spring环境属性,如cloud.services.myservice.credentials.db
和vcap.services.myservice.credentials.db
。这些属性不能用System.getenv()
检索,因为它们仅存在于Spring环境抽象中,而不存在于OS环境中。这在Spring blog post中很好地描述。更多详细信息在Spring Boot javadoc中。
答案 1 :(得分:0)
CloudFoundry中的服务在VCAP_SERVICES
环境变量中显示为JSON blob。
在Java中,您将能够获得包含以下所有服务的对象:
JSONObject vcap = new JSONObject(System.getenv("VCAP_SERVICES"));
https://docs.run.pivotal.io/devguide/deploy-apps/environment-variable.html有关提供的环境变量的更多信息。