Spring配置mysql连接池,连接超时解决方法

来源:互联网 发布:数据分析师认证考试 编辑:程序博客网 时间:2024/06/03 12:45

mysql默认连接超时时间为8小时,Spring配置mysql连接池时,长时间不用连接句柄,会造成连接超时,主要是数据库断掉了连接,而程序本身不知道,继续用着已经关闭的连接就会报错,有三种作法可以解决这个问题,一种是改变mysql的my.ini文件,在my.ini里添加wait_timeout=N秒;另外一种作法就是每次用到连接时都检查一下是否超时,不过,这个作法相法不高明;还有一种作法就是利用org.apache.commons.dbcp.BasicDataSource里本身的配置:testWhileIdle,GenericObjectPool中针对pool管理,起了一个Evict的TimerTask定时线程进行控制(可通过设置参数timeBetweenEvictionRunsMillis>0),定时对线程池中的链接进行validateObject校验,对无效的链接进行关闭后,会调用ensureMinIdle,适当建立链接保证最小的minIdle连接数;validateQuery,代表检查的sql;numTestsPerEvictionRun,代表每次检查链接的数量,建议设置和maxActive一样大,这样每次可以有效检查所有的链接,一般的配置如下:

<property name="testWhileIdle"><value>true</value></property>
<property name="testOnBorrow"><value>false</value></property>  
<property name="testOnReturn"><value>false</value></property>  
<property name="validationQuery"><value>select 1</value></property>
<property name="timeBetweenEvictionRunsMillis"><value>N毫秒(不能比数据库默认的超时时间大)</value></property>  
<property name="numTestsPerEvictionRun"><value>建议设置和maxActive一样大</value></property>  ,

其中testOnBorrow就是第二种作法就是在进行borrowObject进行处理时,对拿到的connection进行validateObject校验;一般不启用,浪费性能;

testOnReturn在进行returnObject对返回的connection进行validateObject校验,和testOnBorrow配对使用。

原创粉丝点击