我正在使用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
?
答案 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);
};
}