我正在尝试使用Java从本地计算机连接到Google App Engine的数据存储区。我不会将该服务与GAE上的应用程序一起使用,它将在AWS上使用。
我尝试了什么
我尝试过使用
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
,但我认为是应用程序托管在GAE上的时候。
目前,我已使用系统变量 GOOGLE_APPLICATION_CREDENTIALS 获取的json凭据文件启动并运行Google存储。连接工作正常,所以我的猜测是我可能需要做类似于存储的事情。 我为Storage做了类似的事情:
HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = new JacksonFactory();
GoogleCredential credential = GoogleCredential.getApplicationDefault(transport, jsonFactory);
if (credential.createScopedRequired()) {
Collection<String> bigqueryScopes = StorageScopes.all();
credential = credential.createScoped(bigqueryScopes);
}
Storage client = new Storage.Builder(transport, jsonFactory, credential)
.setApplicationName("APPLICATION_NAME")
.build();
问题
所以我的问题是:如何从Google App Engine外部连接到Google App Engine数据存储?
感谢您的帮助!
答案 0 :(得分:3)
我建议您转到gcloud-java client library。它建立在您当前使用的代码之上,并且使用数据存储区和存储更容易,尽管文档几乎不存在(截至2016年4月)。
这是使用此库连接到数据存储区的方式:
AuthCredentials credentials = AuthCredentials.createFor(account, key);
DatastoreOptions options = DatastoreOptions.builder()
.authCredentials(credentials)
.projectId(projectId)
.namespace(NAMESPACE)
.build();
Datastore datastore = options.service();
存储相同,但使用StorageOptions。
提示:在GitHub中打开gcloud-java项目 - 该链接位于我之前引用的页面上。有一个文件夹,其中包含如何使用数据存储和存储的示例。
答案 1 :(得分:0)
借助Andrei Volgin的出色帮助,我成功地从Google App Engine以外的应用程序连接到Datastore。以下是我在2016年4月所做的事情:
GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json
我将此代码编写为测试并且连接正常工作
DatastoreOptions options = DatastoreOptions.builder()
.projectId("PROJECT_NAME")
.authCredentials(AuthCredentials.createForJson(
new FileInputStream("/PATH/TO/CREDENTIALS.json"))).build();
Datastore datastore = options.service();
Query<Entity> query =
Query.gqlQueryBuilder(Query.ResultType.ENTITY, "SELECT * FROM user").build();
QueryResults<Entity> results = datastore.run(query);
while (results.hasNext()) {
Entity result = results.next();
System.out.println(result.getString("id"));
}