【问题标题】:Connect to Google App Engine Datastore连接到 Google App Engine 数据存储
【发布时间】: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?

感谢您的帮助!

【问题讨论】:

    标签: java google-app-engine google-cloud-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"));
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      相关资源
      最近更新 更多