【问题标题】:Access sub environment variable in Java [closed]在Java中访问子环境变量[关闭]
【发布时间】:2019-09-24 15:32:48
【问题描述】:

我有以下环境变量:

$ printenv
...
    VCAP_SERVICES={"mariadbent":[{
  "label": "mariadbent",
  "provider": null,
  "plan": "usage",
  "name": "stackoverflow-database",
  "tags": [
    "mariadb",
    "mysql"
  ],
  "instance_name": "stackoverflow-database",
  "binding_name": null,
  "credentials": {
    "host": "some-url-to-the-database.service",
    "hostname": "some-url-to-the-database.service",
    "port": 7689,
    "name": "JDFJHDJF_DFJKDHFUD_DFUZDKFJDKJF",
    "database": "JDFJHDJF_DFJKDHFUD_DFUZDKFJDKJF",
    "username": "hsdfhsjkfhsjkhfjk",
    "password": "iuzwerhsdjkfjkasd",
    "database_uri": "mysql://dfdfdfdfdf:jrb4j4QxzgbAcfLk@some-url-to-the-database.service:3306/JDFJHDJF_DFJKDHFUD_DFUZDKFJDKJF?reconnect=true",
    "uri": "mysql://dfdfdfdfdf:jrb4j4QxzgbAcfLk@some-url-to-the-database.service:3306/JDFJHDJF_DFJKDHFUD_DFUZDKFJDKJF?reconnect=true",
    "jdbcUrl": "jdbc:mysql://some-url-to-the-database.service:3306/JDFJHDJF_DFJKDHFUD_DFUZDKFJDKJF?user=dfdfdfdfdf&password=jrb4j4QxzgbAcfLk"
  },
  "syslog_drain_url": null,
  "volume_mounts": [

  ]
}]}

我可以使用System.out.println("VCAP_SERVICES: " + System.getenv("VCAP_SERVICES")); 获取整个数据“包”,但我想在上述输出中提取一些字段,例如username

我该怎么做?

【问题讨论】:

  • VCAP_SERVICE 看起来像一个 json。您可以使用 Jackson 或任何 json 解析器并获取您想要的值。
  • 看起来像 JSON,所以你需要使用一些 JSON 库来解析它,例如杰克逊。
  • 没有“子环境变量”这样的东西。

标签: java environment-variables


【解决方案1】:

你的VCAP_SERVICE 持有一个json。您可以使用 json 解析器从中获取值。

这是一个使用 Jackson 的示例,但还有更多的库可以做到这一点。

try{

    String json = System.getenv("VCAP_SERVICES"); //NullPointerException, SecurityException

    JsonNode jsonNode = (new ObjectMapper()).readTree(json); //IOException

    if(jsonNode.has("mariadbent") && jsonNode.get("mariadbent").isArray()){

        for(JsonNode elem : jsonNode.get("mariadbent")){

            if(elem.has("credentials")){

                JsonNode cred = elem.get("credentials");

                if(cred.has("host")){

                    System.out.println(
                        cred.get("host").asText() //some-url-to-the-database.service
                    );

                }else{ System.out.println("no host"); }

            }else{ System.out.println("no credentials"); }

        }

    }else{ System.out.println("no mariadbent or not array"); }

}catch(Exception e){ e.printStackTrace(); }

为此,您需要 lib Jackson Databind: https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind/2.9.9.3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-26
    • 2012-12-15
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    相关资源
    最近更新 更多