Кажется, проблема в моем приложении. Когда когда-либо приложение простаивает очень долгое время (я не уверен в точном времени), при запуске я получаю следующее сообщение об ошибке в моих журналах. Я использую Spring + Hibernate + MySQL и ApacheDBCP для пула соединений.
ERROR [org.hibernate.util.JDBCExceptionReporter]The last packet successfully received from the server was 74,188,684 milliseconds ago.
The last packet sent successfully to the server was 74,188,685 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
org.hibernate.exception.JDBCConnectionException: could not execute query
Если я перезапущу URL-адрес, все будет работать нормально. Я предполагаю, что это как-то связано с моим пулом подключений. Вот мой параметр Apache DBCP, а для параметра wait_timeout в MYSQL установлено значение по умолчанию. (28800 секунд или 8 часов).
<beans:bean id="MyID" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<beans:property name="url" value="jdbc:mysql://localhost:17761/myDB"/>
<beans:property name="username" value="myname"/>
<beans:property name="password" value="mypwd"/>
<beans:property name="maxIdle" value="5"/>
<beans:property name="maxActive" value="20"/>
<beans:property name="minIdle" value="5"/>
</beans:bean>
Пока я искал, я нашел этот ссылка Возможные варианты решения вопроса.
Настройте строку подключения с autoReconnect = true
Поможет ли это решить проблему? В том же вопросе, упомянутом выше, другой автор говорит, что не рекомендуется использовать это решение.
Увеличение значения переменной сервера MySQL wait_timeout.
Я не уверен, как это поможет в устранении ошибки. если это помогает, как рассчитать соответствующее значение wait_timeout. Я имею ввиду какие должны быть критерии для этого?
Настройка пула подключений для проверки действительности подключения.
После некоторого исследования я узнал, что могу использовать validationQuery = "SELECT 1" для проверки возможности подключения перед выполнением фактического запроса. Поможет ли это решить проблему? Не повлияет ли это на производительность?
Проблема связана не только с Apache DBCP, я также видел ее в C3P0.
Пожалуйста помоги.