1

自上一篇文章以来,是否进行了所有建议的更改,但这个问题仍然困扰着我。这是我得到的错误:

Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 44,499,102 milliseconds ago.

这是我的 hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>

    <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>        
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>        
    <property name="connection.autoReconnect"> true</property>
    <property name="connection.autoReconnectForPools">true</property>
    <property name="connection.is-connection-validation-required">true</property>

    <property name="hibernate.c3p0.acquire_increment">5</property> 
    <property name="hibernate.c3p0.max_size">150</property>
    <property name="hibernate.c3p0.max_statements">0</property>
    <property name="hibernate.c3p0.min_size">10</property>
    <property name="hibernate.c3p0.timeout">100</property> <!-- seconds --> 
    <property name="hibernate.c3p0.idle_test_period">30</property> <!-- seconds --> 

    <property name="hibernate.connection.url">jdbc:mysql://!secret!autoReconnect=true</property>
    <property name="hibernate.connection.username">!secret!</property>
    <property name="hibernate.connection.password">!secret!</property>


    <!-- <property name="hibernate.connection.pool_size">10</property> -->

    <property name="show_sql">true</property>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.hbm2ddl.auto">update</property>
    <property name="current_session_context_class">thread</property>

    <!-- Mapping files -->
    <mapping resource="mappings.hbm.xml"/>
</session-factory>
</hibernate-configuration>

和 c3p0.properties

c3p0.preferredTestQuery=select 1 from dual
c3p0.maxConnectionAge=3600
c3p0.testConnectionOnCheckin=true
c3p0.testConnectionOnCheckout=true
c3p0.acquireRetryDelay=1000
c3p0.acquireRetryAttempts=30
c3p0.breakAfterAcquireFailure=false
c3p0.idleConnectionTestPeriod=100
4

4 回答 4

2

至于我,你的 c3p0 配置不正确。

c3p0.preferredTestQuery 之类的属性必须位于类路径中的 c3p0.properties 文件中(例如 WEB-INF/classes)。

下面是我的 c3p0.properties 文件示例,它适用于 Oracle:

c3p0.preferredTestQuery=SELECT 1 from dual
c3p0.maxConnectionAge=3600
c3p0.testConnectionOnCheckout=true
c3p0.acquireRetryDelay=1000
c3p0.acquireRetryAttempts=30
c3p0.breakAfterAcquireFailure=false

另请参阅此处的 c3p0 官方文档。

请注意您使用的 c3p0 版本。他们在 c3p0 0.9 的早期版本中遇到了连接恢复问题。

于 2010-10-01T20:27:44.430 回答
0

似乎与数据库的连接已超时并已被数据库服务器终止。您应该增加服务器可以等待的时间或将 ?autoReconnect=true 附加到您的 jdbc 连接字符串。

于 2010-10-01T19:12:09.103 回答
0

我认为这篇文章可能会有所帮助。如果是这样,增加 的值wait_timeout只会推迟更多的时间,而不是解决问题。

问题可能与此有关:

如果您有兴趣,我在这里记录了一个案例。

于 2013-09-03T15:07:17.523 回答
0

在根目录的 c3po.properties 文件中输入以下行 (1)。(您应该使用 hibenate-c3po 3.6.10 final.jar)并在使用的 Hibeanate.cfg.xml 中添加 (2) 部分。

  1. c3p0.testConnectionOnCheckout=true

  2. <property name="hibernate.c3p0.idle_test_period">100</property> <property name="hibernate.c3p0.max_size">30</property> <property name="hibernate.c3p0.max_statements">10</property> <property name="hibernate.c3p0.min_size">10</property> <property name="hibernate.c3p0.timeout">1800</property> <property name="hibernate.c3p0.validate">true</property> <property>

于 2016-02-08T09:29:51.143 回答