Hibernate 冬眠+;c3p0+;postgres=SQLState:08006发送到后端时发生I/O错误

Hibernate 冬眠+;c3p0+;postgres=SQLState:08006发送到后端时发生I/O错误,hibernate,timeout,Hibernate,Timeout,您好,我有一个事务性的带注释的服务函数,它调用一个外部RESTAPI,有时速度很快,有时大约需要10秒 当api快速返回时,一切正常,当它花费太长时间时,hibernate会给我以下异常: http-bio-8080-exec-5 03/06/2014 16:05:59,346 | WARN | org.hibernate.engine.jdbc.spi.SqlExceptionHelper | logExceptions | SQL Error: 0, SQLState: 08006 http

您好,我有一个事务性的带注释的服务函数,它调用一个外部RESTAPI,有时速度很快,有时大约需要10秒

当api快速返回时,一切正常,当它花费太长时间时,hibernate会给我以下异常:

http-bio-8080-exec-5 03/06/2014 16:05:59,346 | WARN | org.hibernate.engine.jdbc.spi.SqlExceptionHelper | logExceptions | SQL Error: 0, SQLState: 08006
http-bio-8080-exec-5 03/06/2014 16:05:59,351 | ERROR | org.hibernate.engine.jdbc.spi.SqlExceptionHelper | logExceptions | An I/O error occured while sending to the backend.
http-bio-8080-exec-5 03/06/2014 16:05:59,353 | WARN | com.mchange.v2.c3p0.impl.NewPooledConnection | handleThrowable | [c3p0] A PooledConnection that has already signalled a Connection error is still in use!
http-bio-8080-exec-5 03/06/2014 16:05:59,354 | WARN | com.mchange.v2.c3p0.impl.NewPooledConnection | handleThrowable | [c3p0] Another error has occurred [ org.postgresql.util.PSQLException: This connection has been closed. ] which will not be reported to listeners!
org.postgresql.util.PSQLException: This connection has been closed.
    at org.postgresql.jdbc2.AbstractJdbc2Connection.checkClosed(AbstractJdbc2Connection.java:714)
    at org.postgresql.jdbc2.AbstractJdbc2Connection.rollback(AbstractJdbc2Connection.java:731)
    at com.mchange.v2.c3p0.impl.NewProxyConnection.rollback(NewProxyConnection.java:860)
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doRollback(JdbcTransaction.java:163)
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.rollback(AbstractTransactionImpl.java:209)
    at org.springframework.orm.hibernate4.HibernateTransactionManager.doRollback(HibernateTransactionManager.java:574)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:846)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:823)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.completeTransactionAfterThrowing(TransactionAspectSupport.java:493)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:264)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631)
postgres服务器会记录此事件

2014-06-03 16:04:40 CEST LOG:  unvollständige Message vom Client
unvollstÃndige Message vom客户端~~来自客户端的消息不完整

所以我假设有任何超时。。。但我不知道在哪里,我的hibernate配置:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <!-- Connection properties -->
    <property name="driverClass" value="org.postgresql.Driver" />
    <property name="jdbcUrl" value="jdbc:postgresql://localhost:5432/dbname" />
    <property name="user" value="postgres" />
    <property name="password" value="xxx" />
    <!-- Pool properties -->
    <property name="numHelperThreads" value="10" />
    <property name="acquireIncrement" value="3" />
    <property name="initialPoolSize" value="5" />
    <property name="minPoolSize" value="5" />
    <property name="maxPoolSize" value="20" />
    <property name="maxStatements" value="50" />
    <property name="idleConnectionTestPeriod" value="300000" />
    <property name="loginTimeout" value="300" />
</bean>

<property name="hibernateProperties">
        <value>
            hibernate.hbm2ddl.auto=update
            hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
            hibernate.bytecode.use_reflection_optimizer=false
            hibernate.max_fetch_depth=0
        </value>
    </property>

hibernate.hbm2ddl.auto=更新
hibernate.dialogue=org.hibernate.dialogue.PostgreSqlDialogue
hibernate.bytecode.use\u reflection\u optimizer=false
hibernate.max\u fetch\u depth=0

问题出在这一行

Restrictions.in("id", hugeidlist)

hugeidlist来自外部api,包含超过100000个条目,生成了一个太长的查询,我现在已经拆分了该列表。问题是这一行

Restrictions.in("id", hugeidlist)

hugeidlist来自外部api,包含超过100000个条目,生成了一个太长的查询,我现在已经拆分了该列表。问题是这一行

Restrictions.in("id", hugeidlist)

hugeidlist来自外部api,包含超过100000个条目,生成了一个太长的查询,我现在已经拆分了该列表。问题是这一行

Restrictions.in("id", hugeidlist)
hugeidlist来自外部api,包含超过100000个条目,生成的查询太长,我现在已经拆分了列表