Это завернутое исключением и не очень интересно. Это корневая причина исключения, которое фактически говорит нам о корневой причине. Пожалуйста, смотри немного дальше в штабеле. Шанс большой, что вы тогда сталкиваетесь с SQLException: соединение отказалось
или SQLException: Connection Timed Out
.
Если это верно в вашем случае, а затем все возможные причины:
Для решения того или иного, следуйте следующим советам:
Ping
. My.cnf
MySQL DB. - опция Skip-Networking
. Кстати (и не связано с фактической проблемой), вам не обязательно нужно загружать драйвер JDBC на каждый GetConnection ()
. Только один раз во время запуска достаточно.
У нас есть программное обеспечение (webapp с Tomcat), использующее общий пул соединений Apache, и мы отлично работали в течение многих лет. В прошлом месяце мне пришлось обновлять библиотеки из-за старой ошибки, с которой мы столкнулись. Ошибка была исправлена в одной из последних версий.
Вскоре после установки мы начали получать именно эти сообщения. Из тысяч соединений, которые мы получали в день, горстка (обычно до 10) получала это сообщение об ошибке. Не было никакого реального шаблона, за исключением того, что они иногда группировались в маленькие группы от 2 до 5.
Я изменил опции в пуле для проверки соединения каждый раз, когда одно из них было взято из пула или возвращено обратно (если одно из них было найдено плохим, вместо него генерировалось новое), и проблема исчезала.
Вы обновляли банку MySQL в последнее время? Похоже, что в нашей (признаться, очень старой) банке может быть новая настройка, которой раньше не было.
Я согласен с BalusC попробовать некоторые другие опции в вашей конфигурации, например, те, которые вы передаете в MySQL (в дополнение к таймауту подключения).
Если эта ошибка является преходящей, как моя, а не постоянной, то вы можете использовать простую попытку/ловушку и цикл, чтобы продолжить попытку до тех пор, пока все не увенчается успехом, или использовать пул соединений, чтобы обработать эту деталь за вас.
Другая случайная идея: Я не знаю, что происходит, почему вы пытаетесь использовать закрытое соединение (какое исключение вы получаете). Могли бы вы случайно где-нибудь закрыть соединение?
Как упоминал BalusC, было бы очень полезно опубликовать полную трассировку стека (всегда публикуйте полную трассировку стека, это бесполезно и разочаровывает чтобы иметь только первые строки трассировки стека).
Как бы то ни было, вы упомянули, что ваш код работал нормально и что эта проблема внезапно стала возникать без каких-либо изменений кода, поэтому мне интересно, может ли это быть связано с вашим другим вопросом. Проблема с не закрывает соединение с базой данных во время отладки? На самом деле, если эта проблема возникла во время отладки, я думаю, что это так (у вас закончились соединения). В этом случае перезапустите сервер базы данных (и следуйте предложениям другого вопроса, чтобы избежать этой ситуации).