我在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在本地计算机上访问它?非常感谢所有帮助。
答案 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())