自上次发布以来,是否提出了所有建议的更改,但此问题仍然困扰着我。这是我得到的错误:
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
对于我来说,您配置的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的早期版本中恢复连接时遇到问题。