У меня есть приложение, которое использует MySql для сохранения в таблицу (эта таблица имеет 2 поля JSON, и один из них может принимать большой вход). Время от времени в производстве у меня возникает следующая ошибка:
SqlExceptionHelper - последний пакет, успешно полученный с сервера, был 71 290 382 миллисекунды назад.
Последний пакет, успешно отправленный на сервер, составил 71 290 384 миллисекунды. больше, чем заданное сервером значение "wait_timeout". Перед использованием в своем приложении вы должны рассмотреть вопрос об истечении срока действия и/или проверять достоверность подключения, увеличивая настроенные сервером значения для тайм-аутов клиента или используя свойство соединения Connector/J "autoReconnect = true", чтобы избежать этой проблемы.
Я не понимаю, почему это происходит, поскольку я никогда не сталкивался с этой проблемой. Это конфигурация, которую я сейчас имею:
cfg.setProperty("hibernate.c3p0.min_size", "5")
.setProperty("hibernate.c3p0.max_size", "20")
.setProperty("hibernate.c3p0.timeout", "30000")
.setProperty("hibernate.c3p0.max_statements", "50")
.setProperty("hibernate.c3p0.idle_test_period", "3000")
.setProperty("hibernate.connection.autoReconnect", "true")
.setProperty("hibernate.connection.autoReconnectForPools", "true");
Я что-то пропустил?.
У нас была такая же проблема. Я искал в истории, и, хотя вы можете сохранить значения, которые у вас есть, вам нужно добавить следующее: <property name="connection.is-connection-validation-required">true</property>
. Это сделало трюк для нашего артефакта, но вам нужно будет проверить свое дело, так как у вас могут быть другие настройки.
В качестве примечания, я считаю, что это должно быть:
.setProperty("connection.autoReconnect", "true")
.setProperty("connection.autoReconnectForPools", "true");
У нас также был файл c3p0.properties
:
c3p0.preferredTestQuery=select 1 from dual
c3p0.maxConnectionAge=3600
c3p0.testConnectionOnCheckin=false
c3p0.testConnectionOnCheckout=true
c3p0.acquireRetryDelay=1500
c3p0.acquireRetryAttempts=15
c3p0.breakAfterAcquireFailure=false
c3p0.idleConnectionTestPeriod=200
Обратите внимание, в частности, на testConnectionOnCheckout.