Я получил эту ошибку из производственного кода:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:
Последний пакет успешно получен
с сервера было 36940 секунд
назад. Последний пакет успешно отправлен
на сервер было 36940 секунд назад,
который длиннее сервера
настроенное значение 'wait_timeout'.
Вы должны рассмотреть либо истекает
и / или проверка правильности подключения
перед использованием в вашем приложении,
увеличение настроенного сервера
значения времени ожидания клиента или использования
свойство соединения Connector / J
'autoReconnect = true', чтобы избежать этого
проблема.
А сейчас я пытаюсь воспроизвести проблему локально и исправить ее. Я устанавливаю контекст весны следующим образом:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close" p:driverClass="com.mysql.jdbc.Driver"
p:jdbcUrl="jdbc:mysql://localhost:3306/test?userUnicode=yes&characterEncoding=UTF-8&"
p:idleConnectionTestPeriod="120" p:initialPoolSize="1" p:maxIdleTime="1800"
p:maxPoolSize="1" p:minPoolSize="1" p:checkoutTimeout="1000"
/>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="hibernateProperties">
<value>
hibernate.connection.provider_class = org.hibernate.connection.C3P0ConnectionProvider
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.default_schema=platform_server_original
hibernate.show_sql=false
</value>
</property>
<property name="mappingResources">
<list>
<value>sometables.hbm.xml</value>
</list>
</property>
</bean>
Затем я установил свой mysql wait_timeout на 10 секунд, затем запустил мой тест, который в основном открывает соединение, выполняет запрос, закрывает его, чтобы он вернулся в пул, затем спит поток в течение 15 секунд, а затем открывает снова соединение и повторите запрос, чтобы оно разорвалось. Однако я получил похожую ошибку только:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:
Отказ линии связи
Последний отправленный на сервер пакет был 16
мс назад.
Итак, мне интересно, являются ли эти две ошибки одинаковыми или они разные? Я провел некоторые исследования, и кажется, что обе ошибки сводились к одному и тому же решению: использование свойства "testConnectionOnCheckout = true". Однако, согласно документу c3p0, это очень дорогая проверка. Рекомендуется использовать «idleConnectionTestPeriod», но я уже установил это значение на 120 секунд. Какое значение я должен использовать, чтобы он мог правильно проверить соединение в режиме ожидания?
Так что я в основном спрашиваю две вещи:
1. как воспроизвести ошибку, полученную в рабочем коде?
2. как мне это исправить?
Спасибо!