Проблема проверки соединения с DBCP - PullRequest
1 голос
/ 21 июля 2009

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

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

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

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

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

РЕДАКТИРОВАТЬ: Думаю, я должен был прочитать этот вопрос , прежде чем я начал ...

1 Ответ

1 голос
/ 18 августа 2009

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

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

...