Tomcat, Будьте в спящем режиме и java.io. EOFException

Мое JAVA-приложение, какое использование В спящем режиме и это размещается Tomcat 6.0, получает следующее исключение после долгого времени неактивности, когда это пытается получить доступ к DB:

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.io.EOFException

STACKTRACE:

java.io.EOFException
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1963)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2375)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2874)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1623)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3249)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1268)
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1403)
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1812)
    at org.hibernate.loader.Loader.doQuery(Loader.java:697)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
    at org.hibernate.loader.Loader.doList(Loader.java:2232)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2129)
    at org.hibernate.loader.Loader.list(Loader.java:2124)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1149)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)

Какие-либо подсказки?

Спасибо

5
задан Pascal Thivent 29 May 2010 в 15:53
поделиться

1 ответ

MySQL по умолчанию закроет неактивные соединения через 8 часов ( wait_timeout ). Это «известная проблема», и вы найдете множество ссылок на нее в Интернете, например эта . Итак, либо:

  • настройте tomcat для проверки соединений при заимствовании, используя validationQuery в конфигурации источника данных:

     <параметр>
      validationQuery 
      выберите 1 
    
    
  • увеличьте wait_timeout MySQL через my.cnf / my.ini или подключившись к клиенту SQL командной строки и введя SET GLOBAL wait_timeout = 86400 , или другое подходящее количество секунд.

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

3
ответ дан 15 December 2019 в 06:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: