如何设置数据存储区,以便通过非App Engine Java App访问本地计算机

时间:2014-10-13 20:21:18

标签: java google-cloud-datastore google-cloud-platform

我在java应用程序(非应用程序引擎)中从本地计算机访问Google云数据存储区时遇到问题。

当我尝试使用下面的代码访问数据存储区时,我得到一个例外,说明"数据存储区数据集没有设置在选项"中,因为它没有设置在GoogleCredential。

System.setProperty("DATASTORE_DATASET", "xxxx-722");
     String emailAddress = "xxxxxxx@developer.gserviceaccount.com";
     JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
     HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();

     GoogleCredential credential = new GoogleCredential.Builder()
         .setTransport(httpTransport)
         .setJsonFactory(JSON_FACTORY)
         .setServiceAccountId(emailAddress)
         .setServiceAccountPrivateKeyFromP12File(new File("D:\\Key\\xxxxx.p12"))
         .setServiceAccountScopes(Collections.singleton(StorageScopes.DEVSTORAGE_FULL_CONTROL))         
         .build();

如果我按照下面的代码执行操作,我会得到一个例外情况,即我没有使用任何凭据......

System.setProperty("DATASTORE_SERVICE_ACCOUNT", "xxxxx@developer.gserviceaccount.com");
     System.setProperty("DATASTORE_PRIVATE_KEY_FILE", "D:\\Key\\xxxxxx.p12");
     System.setProperty("DATASTORE_DATASET", "xxxxxx-722");
     Datastore datastore = DatastoreFactory.get().create(DatastoreHelper.getOptionsfromEnv().dataset("xxxxx-722").build()); //(credential).build());

所以我的问题是如何正确设置数据存储区对象,以便我可以通过非应用引擎Java App在本地计算机上访问它?非常感谢所有帮助。

1 个答案:

答案 0 :(得分:1)

请注意,DatastoreHelper会查看环境变量,而不是系统属性。

创建Datastore对象的最简单方法是设置三个环境变量:

export DATASTORE_DATASET=<dataset>
export DATASTORE_SERVICE_ACCOUNT=<service-account>
export DATASTORE_PRIVATE_KEY_FILE=<path-to-private-key-file>

然后在代码调用中:

Datastore datastore = DatastoreFactory.get().getDatastoreFromEnv();

如果您需要以编程方式设置或覆盖某些选项,则可以执行以下操作:

Datastore datastore = DatastoreFactory.get().create(DatastoreHelper.getOptionsfromEnv()
    .dataset("<dataset>")
    .build())
相关问题