Java + Tomcat, Умирающее соединение с базой данных?

У меня есть настройка экземпляра tomcat, но соединение с базой данных, которое я сконфигурировал в контексте. Xml продолжает умирать после периодов бездействия.

Когда я проверяю журналы, я получаю следующую ошибку:

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

Вот конфигурация в context.xml:

 

Я использую autoReconnect = ture, как говорит ошибка, но соединение продолжает умирать. Я никогда раньше этого не видел.

Я также проверил, что все соединения с базой данных закрываются должным образом.

Документация Tomcat

DBCP использует пул подключений базы данных Jakarta-Commons. Он опирается на количество компонентов Джакарта-Коммонс:

 * Jakarta-Commons DBCP * Jakarta-Commons Collections * Jakarta-Commons Pool 

Этот атрибут может помочь вам.

 removeAbandonedTimeout="60" 

Я использую тот же набор пула соединений, и я устанавливаю эти свойства для предотвращения того же, что он просто не настроен через tomcat. Но если первое не работает, попробуйте это.

 testWhileIdle=true timeBetweenEvictionRunsMillis=300000 

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

Таким образом, устанавливая timeBetweenEvictionRunsMillis = 300000, вы инструктируете пул соединений работать через соединения и выселять и закрывать бездействующие каждые 5 минут.

Опция removeAbandoned устарела с точки зрения DBCP 1.2 (хотя все еще присутствует в ветке 1.3). Вот неофициальное объяснение.

Я не знаю, отвечает ли приведенный выше ответ на одно и то же, но некоторые из наших систем используют соединение БД примерно раз в неделю, и я видел, что мы предоставляем флаг -Otimeout или что-то в этом роде для mysql, чтобы установить соединение тайм-аут.

  • Сохранение массивов в базе данных SQLite
  • Код ошибки: 2013. Потерянное соединение с сервером MySQL во время запроса
  • обновить базу данных sql с помощью ContentValues ​​и метода обновления
  • Codeigniter - множественные подключения к базе данных
  • Как проверить, существует ли firebase database mysql
  • дизайн схемы базы данных streamов сообщений
  • Как вывести результаты запроса HiveQL в CSV?
  • Разница между ключом раздела, составным ключом и ключом кластеризации в Cassandra?
  • Что такое использование BaseColumns в Android?
  • Как создать базу данных в android?
  • Плагин аутентификации 'caching_sha2_password' не может быть загружен
  • Давайте будем гением компьютера.