似乎是我的应用程序的问题。当应用程序在启动时闲置很长时间(我不确定准确的时间)时,我会在日志中收到以下错误消息。我使用Spring + Hibernate + MySQL和ApacheDBCP进行连接池
ERROR [org.hibernate.util.JDBCExceptionReporter]The last packet successfully received from the server was 74,188,684 milliseconds ago.
The last packet sent successfully to the server was 74,188,685 milliseconds ago. 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.
org.hibernate.exception.JDBCConnectionException: could not execute query
如果我重新启动网址,一切正常。我认为这与我的连接池有关。这是我的Apache DBCP设置,MYSQL中的wait_timeout设置为默认值。 (28800秒或8小时)。
<beans:bean id="MyID" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<beans:property name="url" value="jdbc:mysql://localhost:17761/myDB"/>
<beans:property name="username" value="myname"/>
<beans:property name="password" value="mypwd"/>
<beans:property name="maxIdle" value="5"/>
<beans:property name="maxActive" value="20"/>
<beans:property name="minIdle" value="5"/>
</beans:bean>
虽然我正在搜索,但我找到了link解决问题的可能方案。
使用autoReconnect = true配置连接字符串
这有助于解决问题吗?在上面提到的同一个问题中,另一位作者说,不建议采用这种解决方案。
增加MySQL服务器变量wait_timeout的值。
我不确定这有助于解决错误。如果有帮助,如何计算适当的wait_timeout值。我的意思是应该是什么标准?
配置连接池以测试连接的有效性。
经过一番研究,我发现在执行实际查询之前我可以使用validationQuery =“SELECT 1”检查连接,这有助于解决问题吗?它不会影响性能吗?
问题不只是Apache DBCP特有的,我也在C3P0中看过它。
请帮忙。
答案 0 :(得分:1)
看起来我找到了解决方案。 我所做的就是在servlet-context.xml中添加以下行。仍在检查此行的性能影响
<beans:property name="validationQuery" value="SELECT 1"/>
问题仍然存在,为什么我确实收到错误? :)