У меня есть пул соединения DBCP в Tomcat. Проблема состоит в том, что, когда соединение потеряно кратко, приложение повреждается, потому что DBCP не попытается снова соединиться снова позже, когда будет соединение. Я могу заставить DBCP снова соединяться автоматически?
Есть 2 способа "решить" это, хотя оба имеют некоторые проблемы:
Вы можете использовать "validationQuery" (см. ниже), чтобы иметь тестовый запрос, выполняемый перед началом работы (обычно что-то вроде 'select 1 from dual', который будет использоваться для проверки соединений до/после того, как вы получите/отдадите их пулу. Это добавляет дополнительный вызов на каждый запрос соединения из пула. См: http://wiki.apache.org/commons/DBCP
Вместо того чтобы делать это для каждого запроса, можно поручить это потоку idleEvictorThread, установив testWhileIdle, хотя в некоторых версиях этот поток может вызвать тупик при высокой нагрузке. См: http://commons.apache.org/dbcp/configuration.html для более подробной информации об этом и других вариантах
Не думайте, что DBCP делает это, но BoneCP (http://jolbox.com) можно настроить на автоматическое воспроизведение любых транзакций при сбое БД или сети. Он полностью прозрачен для вашего приложения.