2010-03-30 1 views
4

У меня есть пул соединений DBCP в Tomcat. Проблема в том, что при коротком замыкании соединения приложение прерывается, потому что DBCP не будет пытаться снова подключиться позже, когда есть соединение. Могу ли я заставить DBCP автоматически подключаться?Автоподключение подключения к базе данных

+0

Уверен, вы называете 'connection.close()' в блоке 'finally' блока' try', когда вы его приобрели? Везде? *Действительно да? – BalusC

ответ

4

Есть 2 способа «решить» это, хотя и есть некоторые вопросы:

  1. Вы можете использовать «validationQuery» (смотри ниже), чтобы иметь тестовый запуск запроса, прежде чем идти (как правило, что-то . как «выберите 1 из двух», который будет использоваться для проверки соединения перед/после того, как вы получите/передать их в пул Это добавляет дополнительный вызов для каждого запроса соединения из пула см:. http://wiki.apache.org/commons/DBCP

  2. Вместо этого для каждого запроса , вы можете заставить idleEvictorThread сделать это, установив testWhileIdle, хотя в некоторых версиях этот поток может вызвать блокировку при высокой нагрузке. См: http://commons.apache.org/dbcp/configuration.html для получения более подробной информации о том, что и других вариантах

1

Не думаю, что ДБХП делает это, но BoneCP (http://jolbox.com) может быть выполнен с возможностью автоматического воспроизведения каких-либо операций, когда DB или сеть идет вниз. Это полностью прозрачно для вашего приложения.

+1

Как это настроить? –

+1

Проверьте функцию transactionReplay. Не используйте это с Hibernate, хотя (у них есть ошибки) – wwadge