Эффективный способ проверки соединения с БД - PullRequest
3 голосов
/ 19 октября 2011

Драйвер БД, с которым я работаю (для БД sybase), не реализует Connection.isValid (). Каков наиболее эффективный способ проверки соединения БД с помощью запроса (или иного) в Java?

Ответы [ 2 ]

6 голосов
/ 19 октября 2011

Библиотеки, такие как C3P0 и DBCP, позволяют вам предоставить запрос проверки, который обычно является чем-то очень простым, например, «выбрать 1». Следовательно, вы можете использовать тот же подход или просто использовать любую из этих библиотек (моя рекомендация будет C3P0).

Однако вместо того, чтобы проверять соединение перед выполнением запроса, вы можете просто попытаться выполнить, а затем повторить операцию, если она потерпит неудачу из-за того, что соединение недопустимо. В качестве альтернативы вы можете рассмотреть подход к соединению без пула, когда соединение создается на лету каждый раз (например, например, Spring * DriverManagerDataSource).

2 голосов
/ 18 ноября 2011

Я в основном согласен с комментарием Адамски об использовании «select 1 from table» в качестве эффективного способа проверки соединения и использования пула соединений (например, commons-dbcp, C3PO).

Серверы приложений (например, Websphere) позволяют вам настроить эту проверку так, чтобы ваш код приложения не знал об этом. У вас есть выбор: всегда проверять соединение перед его использованием или проверять пул соединений при создании новых соединений. Вы также можете периодически очищать соединения, если они устарели.

Если вы не работаете на сервере приложений, вы можете использовать Common DBCP со свойствами, описанными здесь:

http://commons.apache.org/dbcp/configuration.html

Или C3PO и посмотрите на использование свойства idleConnectionTestPeriod. Эта ссылка говорит об использовании с Hibernate, но все еще актуальна для C3PO

http://community.jboss.org/wiki/HowToConfigureTheC3P0ConnectionPool

...