MySQL 和 DBCP 连接池
- MySQL缺省8小时就会断开不活跃的连接,由参数
wait_timeout
和interactive_timeout
控制 - DBCP连接池可以设置对空闲连接进行定时检查,检查方法是执行一条能够返回一条记录的查询语句,如果检查失败,则该连接将会被丢弃,这样就可以保证连接池中的连接一直可用,相关参数为
validationQuery
、testWhileIdle
和timeBetweenEvictionRunsMillis
修改 /etc/my.cnf
,设置上述两个参数,并重启服务。
mysql> show variables like '%timeout%';
+----------------------------+--------+
| Variable_name | Value |
+----------------------------+--------+
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 604800 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| slave_net_timeout | 3600 |
| table_lock_wait_timeout | 50 |
| wait_timeout | 604800 |
+----------------------------+--------+
10 rows in set (0.00 sec)
修改DBCP参数
<connection-pool
maxActive="10"
validationQuery="select 1 from dual"
testWhileIdle="true"
testOnBorrow="false"
testOnReturn="false"
whenExhaustedAction="1"
timeBetweenEvictionRunsMillis="20000"
maxWait="60000">