Тайм-аут для проверки работоспособности Dropwizard?

У меня есть два соединения с базой данных sql, для которых dropwizard автоматически добавляет проверки работоспособности. Но когда приложение теряет соединение с одним из них, конечной точке /healthcheck требуется неопределенно долгое время для ответа, тогда как я бы хотел, чтобы время ожидания истекло через несколько секунд.

Я уже установил настройку maxWaitForConnection, а также экспериментировал с различными настройками checkConnectionOn.., но ничего не помогло.

ОБНОВЛЕНИЕ: проверка работоспособности корректно завершается ошибкой, если сервер активно отказывается от соединения, но зависает на неопределенное время, если это не так, например, проблема с сетью.

Возможно ли, чтобы время проверки работоспособности sql истекло в указанное значение времени, независимо от проблемы?


person Pablote    schedule 25.02.2015    source источник


Ответы (1)


Если настройки времени ожидания JDBC не работают, вы всегда можете просто обернуть проверку БД в Future и ограничьте продолжительность его выполнения:

protected Result check() throws Exception {
  ExecutorService executor = Executors.newSingleThreadExecutor();
  Future<Void> future = executor.submit(new DbConnectionChecker());

  try {
    future.get(SECONDS_THRESHOLD, TimeUnit.SECONDS);
  } catch (TimeoutException e) {
    return Result.unhealthy("DB timed out");
  }
  executor.shutdownNow();
  return Result.healthy();
}

Где DbConnectionChecker что-то вроде:

static class DbConnectionChecker implements Callable<Void> {
  public Void call() throws Exception {
    // Check your DB connection as you normally would
  }
}

Однако было бы неплохо выяснить, почему настройки соединения JDBC не работают должным образом.

person condit    schedule 25.02.2015
comment
То, что вы предлагаете, прекрасно работает, поэтому я думаю, что реализую это решение. Я оставлю вопрос открытым немного дольше, на случай, если кто-то придумает что-то еще. - person Pablote; 26.02.2015
comment
Возможно, стоит добавить информацию о вашем конкретном драйвере и версии JDBC. Возможно, это известная проблема. - person condit; 26.02.2015