关于MySQLNonTransientConnectionException(DBCP连接池处理办法)

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>

猜你喜欢

转载自blog.csdn.net/shuang3281/article/details/85248152
今日推荐