无法使用 java 访问用户提供的服务指定的环境变量
can not access environment variable specified by user provided service with java
我创建了一个用户提供的服务如下:
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_SERVICES
的环境变量,其中包含一个 JSON 数据结构,如您所示:
VCAP_SERVICES: {
"user-provided": [
{
"credentials":{ "db":"text" },
"name":"myservice"
}
]
}
您的应用程序可以使用 System.getenv("VCAP_SERVICES")
检索此 JSON 结构。例如,您可以将该调用中的 JSON returned 解析为 Map
,并检索所需的值。
您的名为 cloud.services.myservice.db
的应用没有可用的环境变量,因此 System.getenv("cloud.services.myservice.db")
不会 return 任何有用的东西。
Spring Boot 解析 VCAP_SERVICES 环境变量并创建 Spring 环境属性,如 cloud.services.myservice.credentials.db
和 vcap.services.myservice.credentials.db
。无法使用 System.getenv()
检索这些属性,因为它们仅存在于 Spring 环境抽象中,而不存在于 OS 环境中。这在 Spring blog post. More details are in the Spring Boot javadoc 中有很好的描述。
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 有关提供的环境变量的更多信息。
我创建了一个用户提供的服务如下:
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_SERVICES
的环境变量,其中包含一个 JSON 数据结构,如您所示:
VCAP_SERVICES: {
"user-provided": [
{
"credentials":{ "db":"text" },
"name":"myservice"
}
]
}
您的应用程序可以使用 System.getenv("VCAP_SERVICES")
检索此 JSON 结构。例如,您可以将该调用中的 JSON returned 解析为 Map
,并检索所需的值。
您的名为 cloud.services.myservice.db
的应用没有可用的环境变量,因此 System.getenv("cloud.services.myservice.db")
不会 return 任何有用的东西。
Spring Boot 解析 VCAP_SERVICES 环境变量并创建 Spring 环境属性,如 cloud.services.myservice.credentials.db
和 vcap.services.myservice.credentials.db
。无法使用 System.getenv()
检索这些属性,因为它们仅存在于 Spring 环境抽象中,而不存在于 OS 环境中。这在 Spring blog post. More details are in the Spring Boot javadoc 中有很好的描述。
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 有关提供的环境变量的更多信息。