如果我在空闲一段时间后启动我的应用程序,我会遇到以下错误。(我使用 Spring+Hibernate+MySQL 作为数据库)
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
我通过将以下内容添加到我的 servlet-context.xml 解决了这个问题。
<beans:property name="validationQuery" value="SELECT 1"/>
我在这里问过这个问题,这个问题更具体到解决方案。我需要知道为什么会出现这个错误。
我尝试了上面链接中提供的第一个(使用 autoReconnect=true 配置连接字符串)和第三个选项(配置连接池以测试连接的有效性),并且两者都有效。我仍然不明白为什么我首先收到错误。
这是我更新的 servlet-context.xml 文件,我正在使用 ApacheDBCP 进行连接池。
<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:property name="validationQuery" value="SELECT 1"/>
</beans:bean>
是连接到期问题吗?请帮我理解。