连接到 Google App Engine 数据存储
Posted
技术标签:
【中文标题】连接到 Google App Engine 数据存储【英文标题】:Connect to Google App Engine Datastore 【发布时间】:2016-07-22 09:41:59 【问题描述】:我正在尝试从我的本地计算机用 Java 连接到 Google App Engine 的数据存储区。我不会将服务与 GAE 上的应用程序一起使用,它将在 AWS 上。
我尝试了什么
我尝试使用
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
,但我认为它适用于应用程序托管在 GAE 上的情况。
现在,我使用系统变量 GOOGLE_APPLICATION_CREDENTIALS 获取的 json 凭据文件启动并运行 Google Storage。连接工作正常,所以我的猜测是我可能需要做一些类似于 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 Datastore?
感谢您的帮助!
【问题讨论】:
【参考方案1】:我建议您转到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();
Storage 也一样,但带有 StorageOptions。
提示:在 GitHub 中打开 gcloud-java 项目 - 链接在我之前引用的页面上。有一个文件夹包含如何使用 Datastore 和 Storage 的示例。
【讨论】:
非常感谢您的快速回答!该项目设法“工作”,但现在我收到一个不同的错误,告诉我没有为我的项目启用 api: 项目 PROJECT_NAME 没有启用 Cloud Datastore API 奇怪的是我在 api 中启用了它控制台:link 你知道我是否需要做其他事情吗?谢谢! dev 上的另一个选项是使用GOOGLE_APPLICATION_CREDENTIALS
环境变量指向从云控制台中的凭据选项卡生成的服务帐户json,例如export GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json
成功了!!非常感谢您的帮助,我有 API beta2 而不是 beta3。激活 beta3 效果很好。【参考方案2】:
在 Andrei Volgin 的出色帮助下,我设法从 Google App Engine 之外的应用程序连接到 Datastore。以下是我在 2016 年 4 月所做的:
启用数据存储 API v1beta3。对我来说,App Engine 中的默认设置是 v1beta2。 https://console.cloud.google.com/apis/api/datastore.googleapis.com/overview?project=PROJECT_NAME 获取已激活 Datastore 的服务的凭据文件。 您可以使用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"));
【讨论】:
以上是关于连接到 Google App Engine 数据存储的主要内容,如果未能解决你的问题,请参考以下文章