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"));
有关提供的环境变量的详细信息