Tuesday, January 03, 2012

jdbc communication link failure

Почти такая же легендарная ошибка для MySQL, как и знаменитая ошибка 1045.

Ошибка связи проявляется в том, что после некоторого периода бездействия первый запрос заканчивается с ошибкой. Все последующие - работают как ни в чем ни бывало. Причина - загадочная попытка драйвера MySQL переиспользовать уже ни на что ни годные jdbc connections.

Обновления JDBC драйверов - не помогают. А помогло вот что - добавить к описанию источника данных (JDBC URL) следующие параметры:

autoReconnect=true
autoReconnectForPools=true

(по умолчанию оба значения - false)

4 comments:

Andrew Fink said...

Почитал доки по нему - не советуют его использовать...

А вы каким JDBC пулом пользуетесь?

BoneCP, DBCP, c3p0 позволяют периодически проверят Connection (e.g. 'select 1' делать) и кроме того позволяют указать максимальное время жизни Connection после которого её принудительно заменят на новую свежую.

Я перепробовал все пулы, лучший
http://jolbox.com/

Вот мои настройки "по умолчанию"
http://apr.hg.sourceforge.net/hgweb/apr/apr/file/365dfccde3de/src/main/resources/dataSourceBase.xml

Coldbeans software said...

testOnBorrow="true" validationQuery="SELECT 1"

для datasource

Andrew Fink said...

Неужели с такой агрессивной опцией нарывались на ошибку?

DBCP же тестирует Connection при каждому получении из пула

Coldbeans software said...

при малом трафике - да. Слишком аггресивно все закэшировано ...