【发布时间】:2013-06-09 15:30:40
【问题描述】:
我正面临一个非常罕见但很麻烦的问题。
java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109)
at java.net.SocketOutputStream.write(SocketOutputStream.java:153)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3832)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2471)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2322)
at sun.reflect.GeneratedMethodAccessor28.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
at com.sun.proxy.$Proxy23.executeQuery(Unknown Source)
at org.hibernate.loader.Loader.getResultSet(Loader.java:2031)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1832)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1811)
at org.hibernate.loader.Loader.doQuery(Loader.java:899)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
我正在阅读很多关于此的内容,但无法弄清楚这个错误是如何在这种休眠设置下出现的:
<hibernate-configuration>
<session-factory>
<property name="hibernate.bytecode.use_reflection_optimizer">false</property>
<property name="current_session_context_class">thread</property>
<property name="show_sql">false</property>
<property name="hibernate.cache.use_query_cache">false</property>
<property name="hibernate.connection.autoReconnect">true</property>
<property name="hibernate.cache.generate_statistics">false</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="c3p0.timeout">100000</property>
<property name="hibernate.c3p0.min_size">0</property>
<property name="hibernate.c3p0.max_size">0</property>
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!-- Assume test is the database name -->
</session-factory>
</hibernate-configuration>
我不想精确地使用连接池。所以我给最大和最小池大小都赋予了 0 值。此错误的原因可能是什么?
【问题讨论】:
-
在两者中设置
0可能不太好。为了安全起见,请评论 (<!-- ... -->) 所有这三个具有c3p0的注释。 -
不会按照community.jboss.org/wiki/HowToConfigureTheC3P0ConnectionPool 为 c3p0 提供默认值吗?注释掉 c3p0 会禁用连接池吗?
-
我不这么认为(如果你删除了所有 c3p0 属性,为什么休眠会启用它?),但我不是 100% 的。你在类路径上有任何 c3p0 jar 吗?如果是这样,请尝试将其删除。
-
我没有任何特定的罐子。无论如何,我正在评论该部分。但是我仍然无法弄清楚管道异常的原因。该问题的原因可能是什么?
-
我想我以前有时会遇到一些损坏的管道异常。我认为那只是网络不稳定。如果是这种情况,除了将休眠配置为在连接中断后立即重新建立连接之外,您无能为力。