(Исключение MySQLNonTransientConnectionException) Спящий режим3.6 MySQL5 c3p0

#mysql #hibernate #jpa #connection-pooling #c3p0

#mysql #спящий режим #jpa #объединение в пул соединений #c3p0

Вопрос:

Я использую JPA hibernate 3.6.6 MySQL5 (mysql-connector-java-5.1.6-bin.jar ) с c3p0-0.9.1.jar реализация пула. Мой persistence.xml

 <properties>
  <property name="hibernate.connection.username" value="xxx"/>
  <property name="hibernate.connection.driver_class" value="xxx"/>
  <property name="hibernate.connection.password" value="xxx"/>
  <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/xxx"/>
  <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
  <property name="hibernate.show_sql" value="true" />
  <property name="hibernate.c3p0.min_size" value="5" />
  <property name="hibernate.c3p0.max_size" value="100" />
  <property name="hibernate.c3p0.timeout" value="1800" />
  <property name="hibernate.c3p0.max_statements" value="50" />
</properties>
  

Вероятно, 1 из 30 запросов, которые я делаю, я бы получил следующее исключение. Затем, если я снова отправлю тот же запрос после исключения, он будет работать нормально. Я знаю, что MySQL5 имеет 8-часовой тайм-аут, но я получаю исключение задолго до этого. Спасибо.

 Sep 30, 2011 3:56:50 PM com.mchange.v2.c3p0.stmt.GooGooStatementCache checkinStatement
INFO: Problem with checked-in Statement, discarding.
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after statement closed.
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
        at com.mysql.jdbc.Util.getInstance(Util.java:381)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
        at com.mysql.jdbc.StatementImpl.checkClosed(StatementImpl.java:380)
        at com.mysql.jdbc.PreparedStatement.clearParameters(PreparedStatement.java:784)
        at com.mchange.v2.c3p0.stmt.GooGooStatementCache.refreshStatement(GooGooStatementCache.java:604)
        at com.mchange.v2.c3p0.stmt.GooGooStatementCache.checkinStatement(GooGooStatementCache.java:236)
        at com.mchange.v2.c3p0.impl.NewPooledConnection.checkinStatement(NewPooledConnection.java:239)
        at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.close(NewProxyPreparedStatement.java:1807)
        at org.hibernate.jdbc.AbstractBatcher.closePreparedStatement(AbstractBatcher.java:563)
        at org.hibernate.jdbc.AbstractBatcher.closeStatement(AbstractBatcher.java:291)
        at org.hibernate.jdbc.AbstractBatcher.closeQueryStatement(AbstractBatcher.java:307)
        at org.hibernate.jdbc.AbstractBatcher.closeQueryStatement(AbstractBatcher.java:234)
        at org.hibernate.loader.Loader.getResultSet(Loader.java:1967)
        at org.hibernate.loader.Loader.doQuery(Loader.java:802)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
        at org.hibernate.loader.Loader.doList(Loader.java:2533)
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
        at org.hibernate.loader.Loader.list(Loader.java:2271)
        at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452)
        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:1268)
        at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
        at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:246)
        ...
  

Ответ №1:

Это может произойти после длительного бездействия. Добавить validationQuery в свой dataSource компонент:

 <property name="validationQuery">
<value>Select 1</value>
</property>
  

Надеюсь, это поможет.