2009-07-21 4 views
1

Я решил использовать DBCP главным образом потому, что получал таймауты в моих подключениях к базе данных. Теоретически, как только вы определяете «запрос проверки», DBCP по умолчанию будет запускать этот запрос в соединении перед его использованием, поэтому вы всегда знаете, что соединение в порядке.Проблема проверки соединения с DBCP

Я установил его две недели назад, и это, казалось, сработало. Однако вчера вечером я получил исключение таймаута в соединении.

На моей машине-машине код остается без перезагрузки MySQL, поэтому я думаю, что DBCP - это что-то делать.

Как я должен продолжить исследование этого вопроса? Используете ли вы DBCP для этой цели?

(Только что удалил 50 строк или более подробно, пытаясь сохранить читаемый вопрос. Сообщите мне, если отсутствует какая-то важная информация).

EDIT: Думаю, я должен был прочитать this question, прежде чем я начал ...

ответ

1

Это не всегда верно. У меня возникли аналогичные проблемы, но оказалось, что DBCP имеет поведение по умолчанию, которое не очень хорошо документировано.

Вы должны установить время между прогонами выключения, чтобы очистить холостые соединения. Это можно установить на объект SharedPoolDataSource, вызвав setTimeBetweenEvictionRunsMillis. Если это никогда не задано, значение по умолчанию отрицательное, и поток никогда не запускается!

+0

Даже если простаивающие соединения не очищаются, не должен ли выполняться запрос проверки, чтобы убедиться, что соединение все еще работает? – itsadok

+1

Является ли testOnBorrow() равным true? – 2009-08-18 18:57:56

Смежные вопросы