Как установить таймаут для: `API-таблицы google-client`?
Я использую API-интерфейс Google-клиента для электронных таблиц.
Я получаю тайм-аут после 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
?
1 ответ
Я столкнулся с той же проблемой и нашел задокументированное решение от Google.
Клиентские библиотеки Google API - таймауты и ошибки
И для простоты ваша реализация должна добавить вызов:
.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
}
};
}
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);
};
}