【发布时间】:2010-06-15 19:02:23
【问题描述】:
我在互联网上阅读了很多关于这个问题的文章,但似乎没有一个明确的解决方案。请有人给我一个明确的答案,说明为什么我会遇到数据库超时。该应用程序是托管在 Tomcat 5.5 服务器上的 GWT 应用程序。我使用spring,会话工厂在applicationContext.xml中创建如下
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${connection.dialect}</prop>
<prop key="hibernate.connection.username">${connection.username}</prop>
<prop key="hibernate.connection.password">${connection.password}</prop>
<prop key="hibernate.connection.url">${connection.url}</prop>
<prop key="hibernate.connection.driver_class">${connection.driver.class}</prop>
<prop key="hibernate.show_sql">${show.sql}</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.c3p0.min_size">5</prop>
<prop key="hibernate.c3p0.max_size">20</prop>
<prop key="hibernate.c3p0.timeout">1800</prop>
<prop key="hibernate.c3p0.max_statements">50</prop>
<prop key="hibernate.c3p0.idle_test_period">300</prop>
</props>
</property>
<property name="annotatedClasses">
<list>
<value>za.co.xxxx.traintrack.server.model.Answer</value>
<value>za.co.xxxx.traintrack.server.model.Company</value>
<value>za.co.xxxx.traintrack.server.model.CompanyRegion</value>
<value>za.co.xxxx.traintrack.server.model.Merchant</value>
<value>za.co.xxxx.traintrack.server.model.Module</value>
<value>za.co.xxxx.traintrack.server.model.Question</value>
<value>za.co.xxxx.traintrack.server.model.User</value>
<value>za.co.xxxx.traintrack.server.model.CompletedModule</value>
</list>
</property>
</bean>
<bean id="dao" class="za.co.xxxx.traintrack.server.DAO">
<property name="sessionFactory" ref="sessionFactory"/>
<property name="adminUsername" value="${admin.user.name}"/>
<property name="adminPassword" value="${admin.user.password}"/>
<property name="godUsername" value="${god.user.name}"/>
<property name="godPassword" value="${god.user.password}"/>
</bean>
第二天之前一切正常:
INFO | jvm 1 | 2010/06/15 14:42:27 | 2010-06-15 18:42:27,804 WARN
[JDBCExceptionReporter] : SQL Error: 0, SQLState: 08S01
INFO | jvm 1 | 2010/06/15 14:42:27 | 2010-06-15 18:42:27,821 ERROR
[JDBCExceptionReporter] : The last packet successfully received from the server
was 38729 seconds ago.The last packet sent successfully to the server was 38729
seconds ago, which is longer than the server configured value of 'wait_timeout'.
You should consider either expiring and/or testing connection validity before
use in your application, increasing the server configured values for client
timeouts, or using the Connector/J connection property 'autoReconnect=true' to
avoid this problem.
INFO | jvm 1 | 2010/06/15 14:42:27 | Jun 15, 2010 6:42:27 PM
org.apache.catalina.core.ApplicationContext log
INFO | jvm 1 | 2010/06/15 14:42:27 | SEVERE: Exception while dispatching
incoming RPC call
我已经阅读了很多不同的东西(没有一个有用),请帮助
【问题讨论】:
-
您尝试了哪些方法?错误消息本身就是完整的答案。
-
但是为什么
hibernate.c3p0.idle_test_period似乎被忽略了?此跟踪是由使用 C3P0 的代码生成的吗? -
您的错误消息表明数据库服务器在 11 小时 内无法访问。你真的确定你在晚上有网络连接吗?
-
@Kilian 我也遇到过类似的问题,每天都必须重新启动 jboss,并且应用程序一直在正常使用。会看这个。
-
Killian,与其说是无法访问数据库,不如说是 11 小时没有请求连接(因此,如果您一天不使用该应用程序,那您就完蛋了)。如果我反弹服务器并有效地在池中创建新连接,只要我一天不离开它,该应用程序就可以正常工作
标签: java hibernate spring jdbc c3p0