查看线上日志发现了如下的异常:
ERROR 500.jsp -
Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 31,680,464 milliseconds ago. The last packet sent successfully to the server was 31,680,469 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.
线上服务器wait_timeout的值为:
select @@wait_timeout;
+----------------+
| @@wait_timeout |
+----------------+
| 7200 |
+----------------+
即两个小时内没有连接的话,服务器会断掉连接。等这时有请求过来的话,请求池会分配一中断的连接,于是报了如上的异常。
经搜索可以在连接池中添加一些额外的配置来避免此问题,如DBCP:
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<property name="validationQuery" value="SELECT 'x'" />
<property name="testWhileIdle" value="true" />