0

Web サービスにアクセスすると、このエラーがランダムに発生します。複製するのは難しく、一度更新すると、すべてが期待どおりに機能します。

  

    原因: org.hibernate.exception.JDBCConnectionException: クエリを実行できませんでした
        org.hibernate.exception.SQLStateConverter.convert (SQLStateConverter.java:97) で
        org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) で
        org.hibernate.loader.Loader.doList (Loader.java:2235) で
        org.hibernate.loader.Loader.listIgnoreQueryCache (Loader.java:2129) で
        org.hibernate.loader.Loader.list (Loader.java:2124) で
        org.hibernate.loader.criteria.CriteriaLoader.list (CriteriaLoader.java:118) で
        org.hibernate.impl.SessionImpl.list (SessionImpl.java:1597) で
        org.hibernate.impl.CriteriaImpl.list (CriteriaImpl.java:306) で
        edu.asd.myproj.hibernate.adapter.CriteriaAdapter.list (CriteriaAdapter.java:380) で
        edu.asd.myproj.DaoHibernateImpl.findByCriteria (DaoHibernateImpl.java:778) で
        edu.asd.myproj.DaoHibernateImpl.findByCriteria (DaoHibernateImpl.java:765) で
        edu.asd.myproj.DaoHibernateImpl.findByProperty (DaoHibernateImpl.java:361) で
        edu.asd.myproj.ProfilesDaoImpl.count (ProfilesDaoImpl.java:81) で
        sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) で
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) で
        java.lang.reflect.Method.invoke(Method.java:597) で
        org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) で
        org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) で
        org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) で
        org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) で
        org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) で
        org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) で
        $Proxy27.count で (不明なソース)
        edu.asd.myproj.ResourceProfileLoaderNew.loadProfiles (ResourceProfileLoaderNew.java:66) で
        sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) で
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) で
        java.lang.reflect.Method.invoke(Method.java:597) で
        org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:297) で
        org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:250) で
        org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:144) で
        ... 50以上
    原因: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: サーバーから正常に受信された最後のパケットは 44323 秒前でした。サーバーに正常に送信された最後のパケットは 44323 秒前でした。 wait_timeout'. この問題を回避するには、アプリケーションで使用する前に接続の有効性を期限切れにするかテストするか、クライアント タイムアウトのサーバー設定値を増やすか、Connector/J 接続プロパティ 'autoReconnect=true' を使用することを検討する必要があります。
        sun.reflect.NativeConstructorAccessorImpl.newInstance0(ネイティブメソッド)
        sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:39) で
        sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) で
        java.lang.reflect.Constructor.newInstance (Constructor.java:513) で
        com.mysql.jdbc.Util.handleNewInstance (Util.java:406) で
        com.mysql.jdbc.SQLError.createCommunicationsException (SQLError.java:1074) で
        com.mysql.jdbc.MysqlIO.send (MysqlIO.java:3246) で
        com.mysql.jdbc.MysqlIO.sendCommand (MysqlIO.java:1917) で
        com.mysql.jdbc.MysqlIO.sqlQueryDirect (MysqlIO.java:2060) で
        com.mysql.jdbc.ConnectionImpl.execSQL (ConnectionImpl.java:2542) で
        com.mysql.jdbc.PreparedStatement.executeInternal (PreparedStatement.java:1734) で
        com.mysql.jdbc.PreparedStatement.executeQuery (PreparedStatement.java:1885) で
        org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery (DelegatingPreparedStatement.java:93) で
        org.hibernate.jdbc.AbstractBatcher.getResultSet (AbstractBatcher.java:208) で
        org.hibernate.loader.Loader.getResultSet(Loader.java:1812) で
        org.hibernate.loader.Loader.doQuery (Loader.java:697) で
        org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections (Loader.java:259) で
        org.hibernate.loader.Loader.doList (Loader.java:2232) で
        ... 79 以上
    原因: java.net.SocketException: 壊れたパイプ
        java.net.SocketOutputStream.socketWrite0 (ネイティブ メソッド) で
        java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) で
        java.net.SocketOutputStream.write(SocketOutputStream.java:136) で
        java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65) で
        java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123) で
        com.mysql.jdbc.MysqlIO.send (MysqlIO.java:3227) で
        ... 90以上

これは私のhibernate.propertiesファイルです

# Turn on for SQL debugging
hibernate.show_sql=true

# Generate schema?
hibernate.hbm2ddl.auto=validate

#============================================================
# C3P0 connection pool configuration
#============================================================
#changed to default values 
c3p0.acquireIncrement=hibernate.c3p0.acquire_increment
c3p0.idleConnectionTestPeriod=hibernate.c3p0.idle_test_period
c3p0.initialPoolSize=10
c3p0.maxIdleTime=hibernate.c3p0.timeout
c3p0.maxPoolSize=hibernate.c3p0.max_size
c3p0.maxStatements=hibernate.c3p0.max_statements
c3p0.minPoolSize=hibernate.c3p0.min_size   
c3p0.testConnectionsOnCheckout=hibernate.c3p0.validate

エラーはランダムに 1 回表示され、再表示されるまでに長い時間がかかります。更新すると消えます。

4

1 に答える 1

4

読者の理解を深めるために、完全な例外スタック トレースを送信してください。

この例外は通常、DB Connection古い場合に発生します。

古い意味: 接続はサーバーによって強制終了されましたが、プールによってまだ有効であると見なされています。接続で接続テストを構成する必要があります。このアプローチでは、C3P0次の構成を使用する必要があります。

c3p0.testConnectionOnCheckin = true
testConnectionOnCheckout= true

さらにチェックするには、次のようにチェックアウトのタイムアウトを増やします。

c3p0.checkoutTimeout = 0

C3P0次のような別のテストオプションをテストします。

  • connectionTesterClassName
  • idleConnectionTestPeriod
  • automaticTestTable
  • preferredTestQuery

テストのもう 1 つの方法は、サンプル コードを記述し、JDBC pureコードでデータベースに接続することです (by DriverManagerand Connectionand etc ) 。

于 2012-05-19T13:39:09.577 に答える