У меня следующая проблема в веб-приложении. Когда я оставляю сервер включенным на некоторое время, например, на 24 часа, мое приложение перестает работать.
Я использую Tomcat 7 и пул соединений. Моя база данных - MySQL.
Я получаю следующее исключение:
Communication link failure: java.io.EOFException, underlying cause: null ** BEGIN NESTED EXCEPTION ** java.io.EOFException STACKTRACE: java.io.EOFException at
com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1394) at
com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:1538) at
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1929) at
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1167) at
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1278) at
com.mysql.jdbc.Connection.execSQL(Connection.java:2251) at
com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1586) at
org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStat
ement.java:96) at
org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStat
ement.java:96) at configuration.Login.doPost(Login.java:104) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:641) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.jav
a:304) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563) at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403) at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:301) at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java
:162) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java
:140) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at
java.lang.Thread.run(Thread.java:662) ** END NESTED EXCEPTION **
Я обнаружил, что эта ошибка произошла, когда пул соединений по какой-то причине после некоторого промежутка времени был закрыт, может быть из-за ограничения по времени или что-то еще.
Мой вопрос заключается в том, что пул соединений не должен был создавать новые соединения, когда в пуле нет соединений? Ошибка не вызвана трафиком, поскольку в данный момент никто не использует приложение. Как я могу исправить эту ошибку? Когда приложение развернуто Я начинаю использовать приложение, соединения в пуле создаются. Эти соединения простаивают? Есть ли способ, которым эти соединения не будут закрыты? Но если я могу это сделать, я не теряю соединения из других приложений на сервере?
Также, если я продолжу пытаться использовать приложение через некоторое время, создаются новые подключения и приложение начинает работать. Но это не нормально .......
// Редактировать, если я вручную закрываю все активные подключения от администратора MYSQL, эта ошибка появляется снова.