Назад | Перейти на главную страницу

jdbc4 CommunicationsException

У меня есть машина, на которой запущено приложение java, которое разговаривает с экземпляром mysql, работающим в том же экземпляре. приложение использует драйверы jdbc4 от mysql. Я продолжаю получать com.mysql.jdbc.exceptions.jdbc4.CommunicationsException в случайное время.

Вот сообщение целиком.

Не удалось открыть соединение JDBC для транзакции; вложенное исключение - com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: последний пакет, успешно полученный от сервера, был 25899 миллисекунд назад. Последний пакет, успешно отправленный на сервер, был 25899 миллисекунд назад, что больше, чем заданное сервером значение ' wait_timeout '. Вам следует рассмотреть возможность истечения срока действия и / или проверки действительности соединения перед использованием в вашем приложении, увеличения значений, настроенных сервером для тайм-аутов клиента, или использования свойства соединения Connector / J 'autoReconnect = true', чтобы избежать этой проблемы.

Для mysql значение глобальных «wait_timeout» и «interactive_timeout» установлено на 3600 секунд, а «connect_timeout» - на 60 секунд. значение тайм-аута ожидания намного больше, чем 26 секунд (25899 мс). упоминается в трассировке исключения.

Я использую dbcp для пула соединений, и вот конфигурация Spring bean для источника данных.

   <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource" >
          <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/db"/>
                <property name="username" value="xxx"/>
                <property name="password" value="xxx" />
                    <property name="poolPreparedStatements" value="false" />
            <property name="maxActive" value="3" />
            <property name="maxIdle" value="3" />
    </bean>

Есть идеи, почему это могло происходить? Решит ли проблему использование c3p0?

Я только вчера обнаружил, что запросы, которые занимают 25 секунд или больше времени ожидания с соединителем mysql .NET. Возможно, есть что-то подобное в драйвере JDBC, возможно, поиграйте со свойством socketTimeout (хотя в документации указано, что по умолчанию тайм-аут отсутствует).