无法使用java访问用户提供的服务指定的环境变量

时间:2017-07-25 04:29:33

标签: cloudfoundry

我创建了一个用户提供的服务,如下所示:

cf cups myservice -p '{"db": "text"}'

我将此服务绑定到我的应用程序,服务名称为myservice。 当我使用cf env命令时,我可以看到消息:

"user-provided": [{
    "credentials":{
        "db":"text"
    },
    "name":"myservice"    
}]

但是当我用java

访问这个变量时
System.getenv("cloud.services.myservice.db")

为空。为什么我无法访问db值?

2 个答案:

答案 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.dbvcap.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有关提供的环境变量的更多信息。