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

Cloud foundry 无法使用java访问用户提供的服务指定的环境变量,cloud-foundry,Cloud Foundry,我创建了一个用户提供的服务,如下所示: cf cups myservice -p '{"db": "text"}' 我将此服务绑定到我的应用程序,服务名称为myservice。 当我使用cf env命令时,我可以看到以下消息: "user-provided": [{ "credentials":{ "db":"text" }, "name":"myservice" }] 但是当我用java访问这个变量时 System.getenv("cloud

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

cf cups myservice -p '{"db": "text"}'
我将此服务绑定到我的应用程序,服务名称为
myservice
。 当我使用cf env命令时,我可以看到以下消息:

"user-provided": [{
    "credentials":{
        "db":"text"
    },
    "name":"myservice"    
}]
但是当我用java访问这个变量时

System.getenv("cloud.services.myservice.db")

是空的。为什么我不能访问
db
值?

当您在应用程序上执行
cf env
时,您会看到一个名为
VCAP\u SERVICES
的环境变量,它包含一个JSON数据结构,如您所示:

VCAP_SERVICES: {
  "user-provided": [
    { 
      "credentials":{ "db":"text" }, 
      "name":"myservice"
    }
  ]
}
您的应用程序可以使用
System.getenv(“VCAP\u服务”)
检索此JSON结构。例如,您可以将该调用返回的JSON解析为
映射
,然后检索所需的值

您的应用程序名为
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 Boot中

CloudFoundry中的服务在
VCAP\u服务
环境变量中呈现JSON blob

在Java中,您可以通过以下方式获得包含所有服务的对象:

JSONObject vcap = new JSONObject(System.getenv("VCAP_SERVICES"));
有关提供的环境变量的详细信息