如何设置超时:`google-client spreadsheet api`?

时间:2017-10-29 10:33:11

标签: java google-api timeout spreadsheet httptransportse

我正在使用google-client api进行电子表格。

我在20秒后抽出时间。如何将超时设置为自定义值?

private Sheets initService(GoogleCredential credential) throws GeneralSecurityException, IOException {
    final HttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
    final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();

    return new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
            .setApplicationName("my_app")
            .build();
}

我应该在HttpTransport

中设置它

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,实际上找到了Google记录的解决方案

Google API Client Libraries - Timeouts and Errors

为简单起见,您的实现必须添加以下调用:

.setHttpRequestInitializer(createHttpRequestInitializer(credential))

在Sheets.Builder中,然后将以下方法添加到您的类中,提供对于应用程序而言似乎合理的任何超时值。

    private HttpRequestInitializer createHttpRequestInitializer(final HttpRequestInitializer requestInitializer) {
    return new HttpRequestInitializer() {
        @Override
        public void initialize(final HttpRequest httpRequest) throws IOException {
            requestInitializer.initialize(httpRequest);
            httpRequest.setConnectTimeout(3 * 60000); // 3 minutes connect timeout
            httpRequest.setReadTimeout(3 * 60000); // 3 minutes read timeout
        }
    };
}

答案 1 :(得分:-1)

private Sheets initService(GoogleCredential credential) throws GeneralSecurityException, IOException {
    final HttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
    final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();

return new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, setTimeout(credential, 60000))
        .setApplicationName("my_app")
        .build();
}

private HttpRequestInitializer setTimeout(final HttpRequestInitializer initializer, final int timeout) {
    return request -> {
        initializer.initialize(request);
        request.setReadTimeout(timeout);
    };
}