【问题标题】:"java.net.SocketException: Broken pipe" when using Hibernate with Mysql将 Hibernate 与 Mysql 一起使用时出现“java.net.SocketException: Broken pipe”
【发布时间】: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 可能不太好。为了安全起见,请评论 (&lt;!-- ... --&gt;) 所有这三个具有 c3p0 的注释。
  • 不会按照community.jboss.org/wiki/HowToConfigureTheC3P0ConnectionPool 为 c3p0 提供默认值吗?注释掉 c3p0 会禁用连接池吗?
  • 我不这么认为(如果你删除了所有 c3p0 属性,为什么休眠会启用它?),但我不是 100% 的。你在类路径上有任何 c3p0 jar 吗?如果是这样,请尝试将其删除。
  • 我没有任何特定的罐子。无论如何,我正在评论该部分。但是我仍然无法弄清楚管道异常的原因。该问题的原因可能是什么?
  • 我想我以前有时会遇到一些损坏的管道异常。我认为那只是网络不稳定。如果是这种情况,除了将休眠配置为在连接中断后立即重新建立连接之外,您无能为力。

标签: mysql hibernate


【解决方案1】:

嗯...这是一个 SocketException。它可能与您提到的属性无关。您应该专注于您的数据源参数。可能是连接 url 或 jndi 名称不正确?

【讨论】:

  • 这个错误很少出现,比如一个月一次。所以我不认为这是由于 url 问题。但有一件事我想问。 Hibernate 使用自己的池,以防任何其他外部方未提供且无法禁用。那么,我们应该使用像 c3p0 这样的外部方吗?有什么办法可以禁用池吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-15
  • 1970-01-01
  • 2011-06-06
  • 2014-05-22
  • 2014-06-14
  • 2014-09-12
相关资源
最近更新 更多