BigQuery 没有获取在 java 中设置的属性

Posted

技术标签:

【中文标题】BigQuery 没有获取在 java 中设置的属性【英文标题】:BigQuery not picking up property set in java 【发布时间】:2019-09-30 18:42:58 【问题描述】:

我正在尝试在需要所有流量都通过代理的机器上连接到 BigQuery。我已经在 J​​ava 和命令行中设置了 http.proxyHost 和 http.proxyPort 系统变量,但我总是收到以下错误:

com.google.cloud.bigquery.BigQueryException: Error getting access token for service account: Read timed out
 at com.google.cloud.bigquery.spi.v2.HttpBigQueryRpc.translate(HttpBigQueryRpc.java:106)
        at com.google.cloud.bigquery.spi.v2.HttpBigQueryRpc.create(HttpBigQueryRpc.java:206)
        at com.google.cloud.bigquery.BigQueryImpl$5.call(BigQueryImpl.java:319)
        at com.google.cloud.bigquery.BigQueryImpl$5.call(BigQueryImpl.java:316)
        at com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:105)
        at com.google.cloud.RetryHelper.run(RetryHelper.java:76)
        at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:50)
        at com.google.cloud.bigquery.BigQueryImpl.create(BigQueryImpl.java:315)
        at com.google.cloud.bigquery.BigQueryImpl.create(BigQueryImpl.java:290)
        at com.ad.google.bigquery.GoogleBigQuery.runGBQQuery_CCPA(GoogleBigQuery.java:172)
        at com.ad.gogbq.test.Tester_GBQ.runQuery(Tester_GBQ.java:62)
        at com.ad.gogbq.test.Tester_GBQ.main(Tester_GBQ.java:274)
Caused by: java.io.IOException: Error getting access token for service account: Read timed out
        at com.google.auth.oauth2.ServiceAccountCredentials.refreshAccessToken(ServiceAccountCredentials.java:432)
        at com.google.auth.oauth2.OAuth2Credentials.refresh(OAuth2Credentials.java:157)
        at com.google.auth.oauth2.OAuth2Credentials.getRequestMetadata(OAuth2Credentials.java:145)
        at com.google.auth.http.HttpCredentialsAdapter.initialize(HttpCredentialsAdapter.java:91)
        at com.google.cloud.http.HttpTransportOptions$1.initialize(HttpTransportOptions.java:159)
        at com.google.api.client.http.HttpRequestFactory.buildRequest(HttpRequestFactory.java:88)
        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.buildHttpRequest(AbstractGoogleClientRequest.java:430)
        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:549)
        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:482)
        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:599)
        at com.google.cloud.bigquery.spi.v2.HttpBigQueryRpc.create(HttpBigQueryRpc.java:204)
        ... 10 more
Caused by: java.net.SocketTimeoutException: Read timed out
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
        at java.net.SocketInputStream.read(SocketInputStream.java:171)
        at java.net.SocketInputStream.read(SocketInputStream.java:141)
        at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
        at sun.security.ssl.InputRecord.read(InputRecord.java:503)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:983)
        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1385)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1397)
        at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
        at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1334)
        at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1309)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:259)
        at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:108)
        at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:79)
        at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:995)
        at com.google.auth.oauth2.ServiceAccountCredentials.refreshAccessToken(ServiceAccountCredentials.java:429)

我已成功使用上述系统变量在相关机器上打开和阅读网页。 BigQuery 似乎没有使用这些变量,我想知道是否有其他人看到过这个?

【问题讨论】:

【参考方案1】:

在您的问题中,您似乎设置了 http.* 属性,因为所有 Google API 访问都是通过 HTTPS 进行的,请确保您设置了以下 2 个属性:

System.setProperty("https.proxyHost", "localhost");
System.setProperty("https.proxyPort", "3128");

在此doc 上查看更多信息。

【讨论】:

以上是关于BigQuery 没有获取在 java 中设置的属性的主要内容,如果未能解决你的问题,请参考以下文章

获取 Vim 中设置的当前值

在 web.config 中设置的当前文化

如何找到松下EXIF中设置的时区

如何在octopack中使用nuspec中设置的版本号?

iOS:如何获取刚刚在界面生成器中设置的 UIView 的框架

如何获取有关谁更改了我在手表中设置的变量的信息(角度)