Mysql服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection,而此时连接池并不知道connection已经断开,所以如果此时要进行数据请求时,就会出现异常MySQLNonTransientConnectionException。
之前spring与mybatis整合时用的是dbcp连接池,所以在spring-mybaits.xml中的连接池配置中加上这一部分配置就ok。
<!-- 数据库DBCP连接池配置 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<!-- 驱动名称 -->
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
......
<!-- 初始化连接数 -->
<property name="initialSize" value="5"></property>
<!-- 连接池最大数 -->
<property name="maxActive" value="20"></property>
<!-- 连接池最大空闲数 -->
<property name="maxIdle" value="5"></property>
<!-- 连接池最小空数-->
<property name="minIdle" value="3"></property>
<!-- 获取连接最大等待时间,单位毫秒 -->
<property name="maxWait" value="6000"></property>
<!-- 取得对象时是否进行验证 -->
<property name="testOnBorrow" value="true"></property>
<!-- 返回对象时是否进行验证 -->
<property name="testOnReturn" value="true"></property>
<!-- 空闲时是否进行验证 -->
<property name="testWhileIdle" value="true"></property>
<!-- 验证连接是否成功, SQL SELECT 指令至少要返回一行 -->
<property name="validationQuery" value="SELECT COUNT(*) FROM DUAL"></property>
<!-- 大于0 ,进行连接空闲时间判断,或为0,对空闲的连接不进行验证;默认30分钟,单位毫秒 -->
<property name="minEvictableIdleTimeMillis" value="1800000"></property>
<!--失效检查线程运行时间间隔,单位毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="1800000"></property>
</bean>