在 GAE 上用 Java 编写 Cron 作业以运行 BigQuery

Posted

技术标签:

【中文标题】在 GAE 上用 Java 编写 Cron 作业以运行 BigQuery【英文标题】:Write Cron Job in Java on GAE to Run BigQuery 【发布时间】:2014-04-06 14:04:34 【问题描述】:

我想在 GAE 上运行一个内部调用 BigQuery 的 cron 作业。

我目前能够运行 BigQuery,但我需要使用我的凭据登录。但我想在没有任何登录的情况下运行 BigQuery 的 cron 作业。

任何帮助将不胜感激。

【问题讨论】:

您需要使用 oauth2.0 令牌。 我如何使用 oauth2.0。因为 cron 作业由 GAE 运行,而不是由任何用户运行。请在 java 中提供一些代码。 【参考方案1】:

我知道这不是您所期望的 java。秘诀是使用 AppAssertionCredentials。 这是python示例:

from apiclient.discovery import build
from oauth2client.appengine import AppAssertionCredentials
import httplib2
from google.appengine.api import memcache

scope = 'https://www.googleapis.com/auth/bigquery'

credentials = AppAssertionCredentials(scope=scope)

http = credentials.authorize(httplib2.Http(memcache))

return build("bigquery", "v2", http=http)

【讨论】:

能不能给个java代码呢。大部分都试过了还是不行。 这里是相关任务的 java 文档:javadoc.google-oauth-java-client.googlecode.com/hg/1.6.0-beta/…【参考方案2】:

我已经成功地在 java 中实现了它。在执行它之前,我们需要为服务帐户生成客户端 ID。

private static final HttpTransport TRANSPORT = new NetHttpTransport();
private static final JsonFactory JSON_FACTORY = new JacksonFactory();
private static Bigquery bigquery;




AppIdentityCredential credential = new AppIdentityCredential(Collections.singleton(BigqueryScopes.BIGQUERY));
bigquery = new Bigquery.Builder(TRANSPORT, JSON_FACTORY, credential)
            .setApplicationName("BigQuery-Service-Accounts/0.1")
            .setHttpRequestInitializer(credential).build();

【讨论】:

以上是关于在 GAE 上用 Java 编写 Cron 作业以运行 BigQuery的主要内容,如果未能解决你的问题,请参考以下文章

没有在Google App Engine中安排的Cron作业

GAE:进程终止,因为后端在后端作业中关闭的时间过长

如何取消或停止Google App Engine Cron作业

在 CPanel 上设置 Cron 作业以执行 PHP 脚本

在 Google App Engine (Java) 中使用 Cron 执行后端

您如何使用 Elastic Beanstalk 和 Java 使用 cron 作业?