Какова причина (и лечение) этого исключения Java MySQL? - PullRequest
1 голос
/ 22 марта 2010

Я получаю следующее исключение при выполнении первого подготовленного заявления после периода бездействия:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: сбой линии связи

Последний пакет, успешно полученный от сервера, был 2 855 054 миллисекунды назад. Последний пакет, успешно отправленный на сервер, был 123 миллисекунды назад. at sun.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод) at sun.reflect.NativeConstructorAccessorImpl.newInstance (неизвестный источник) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (неизвестный источник) на java.lang.reflect.Constructor.newInstance (неизвестный источник) в com.mysql.jdbc.Util.handleNewInstance (Util.java:406) в com.mysql.jdbc.SQLError.createCommunicationsException (SQLError.java:1074) на com.mysql.jdbc.MysqlIO.reuseAndReadPacket (MysqlIO.java:3052) на com.mysql.jdbc.MysqlIO.reuseAndReadPacket (MysqlIO.java:2938) на com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:3481) на com.mysql.jdbc.MysqlIO.sendCommand (MysqlIO.java:1959) на com.mysql.jdbc.MysqlIO.sqlQueryDirect (MysqlIO.java:2109) в com.mysql.jdbc.ConnectionImpl.execSQL (ConnectionImpl.java:2648) на com.mysql.jdbc.PreparedStatement.executeInternal (PreparedStatement.java:2077) at com.mysql.jdbc.PreparedStatement.executeQuery (PreparedStatement.java:2228)

Это отображается только в том случае, если мое приложение недавно не связывалось с MySQL. Последующие запросы выполняются нормально. Я подозреваю, что это какая-то проблема тайм-аута, но периоды бездействия намного ниже 8-часового тайм-аута для MySQL.

Есть предложения?

Ответы [ 2 ]

3 голосов
/ 22 марта 2010

Вы используете пул соединений? Если это так, вы можете просто включить проверку / мониторинг пула соединений, чтобы каждый раз клиентский поток получал работающее соединение MySQL. В большинстве пулов есть способ указать кусок SQL, который не требует больших усилий, для выполнения до того, как соединение будет заимствовано, а иногда даже в фоновом режиме в течение периодов простоя (для повышения производительности за счет того, что некоторые клиентские потоки будут выпущены неправильно). *

Также, w.r.t. проблема времени <8h, подсчитывает ли MySQL бездействие от последнего полученного пакета или последнего значимого события (запроса и т. д.)? Я помню, как видел в коде драйвера MySQL, что реализован сигнал сердцебиения. </p>

0 голосов
/ 22 марта 2010

Я получаю следующее исключение при выполнении первого подготовленного заявления после периода бездействия

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

Проверьте код в отношении контроля подключения к базе данных, и вы можете найти ответ там. Хотя в соответствии с тайм-аутом MySQL значение тайм-аута составляет 8 часов - это все еще возможно в вашем коде (или в чужом коде?), Соединение должно быть закрыто после определенного времени бездействия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...