Ibm cloud 无法读取Bluemix中的VCAP_服务

Ibm cloud 无法读取Bluemix中的VCAP_服务,ibm-cloud,websphere-liberty,Ibm Cloud,Websphere Liberty,我使用以下代码读取Liberty应用程序的VCAP\u SERVICES环境变量。 我没有得到任何值,结果显示为null或“未找到” private void readecasenvvars(){ Map env=System.getenv(); 对象vcap=env.get(“vcap_服务”); 如果(vcap==null){ System.out.println(“未找到VCAP_服务”); } 否则{ 试一试{ JSONObject obj=新的JSONObject(vcap);

我使用以下代码读取Liberty应用程序的
VCAP\u SERVICES
环境变量。 我没有得到任何值,结果显示为null或“未找到”

private void readecasenvvars(){
Map env=System.getenv();
对象vcap=env.get(“vcap_服务”);
如果(vcap==null){
System.out.println(“未找到VCAP_服务”);
}    
否则{
试一试{
JSONObject obj=新的JSONObject(vcap);
字符串[]名称=JSONObject.getNames(obj);
如果(名称!=null){
for(字符串名称:名称){
if(name.startsWith(“数据缓存”)){
JSONArray val=obj.getJSONArray(名称);
JSONObject serviceAttr=val.getJSONObject(0);
JSONObject credentials=serviceAttr.getJSONObject(“凭证”);
字符串username=credentials.getString(“用户名”);
String password=credentials.getString(“密码”);
String endpoint=credentials.getString(“catalogEndPoint”);
String gridName=credentials.getString(“gridName”);
System.out.println(“找到配置的用户名:“+username”);
System.out.println(“找到配置的密码:+密码”);
System.out.println(“找到配置的端点:“+endpoint”);
System.out.println(“找到配置的gridname:+gridname”);
打破
}             
}
}
}捕获(例外e){
e、 printStackTrace();
}
}
}

您的解析代码正常

  • 在Bluemix应用程序仪表板中,确认已将DataCache服务绑定到应用程序
  • 绑定新服务后,需要重新启动应用程序,以更新环境变量<代码>cf重新设置页面
  • 输出环境变量以确认数据缓存凭据是否在那里
    System.out.println(“VCAP_服务:”+System.getenv(“VCAP_服务”)
  • 您还应该知道,默认情况下,Liberty buildpack会为数据缓存实例生成或更新现有的server.xml文件配置节。应用程序可以使用JNDI访问绑定的数据缓存实例。缓存实例可以通过@Resource注释注入应用程序,也可以通过javax.naming.InitialContext由应用程序查找

    要在Bluemix for Liberty应用程序上查看server.xml,请执行以下操作:

    cf文件myLibertyApplication/wlp/usr/servers/defaultServer/server.xml

    您应该看到如下内容:

    <xsBindings>
      <xsGrid jndiName="wxs/myCache" 
      id="myCache"
      gridName="${cloud.services.myCache.connection.gridName}" 
      userName="${cloud.services.myCache.connection.username}"
      password="${cloud.services.myCache.connection.password}" 
      clientDomain="${cloud.services.myCache.name}"/>
    </xsBindings>
    
    
    
    其中,您的JNDI名称是wxs/myCache。这避免了解析VCAP_服务的需要。

    什么值为null或“未找到”?
    <xsBindings>
      <xsGrid jndiName="wxs/myCache" 
      id="myCache"
      gridName="${cloud.services.myCache.connection.gridName}" 
      userName="${cloud.services.myCache.connection.username}"
      password="${cloud.services.myCache.connection.password}" 
      clientDomain="${cloud.services.myCache.name}"/>
    </xsBindings>