dbcp数据库空闲配置(转)
DBCP连接池配置常用参数说明
| 参数 | 默认值 | 说明 |
| username | \ | 传递给JDBC驱动的用于建立连接的用户名 |
| password | \ | 传递给JDBC驱动的用于建立连接的密码 |
| url | \ | 传递给JDBC驱动的用于建立连接的URL |
| driverClassName | \ | 使用的JDBC驱动的完整有效的Java 类名 |
| initialSize | 0 | 初始化连接:连接池启动时创建的初始化连接数量,1.2版本后支持 |
| maxActive | 8 | 最大活动连接:连接池在同一时间能够分配的最大活动连接的数量, 如果设置为非正数则表示不限制 |
| maxIdle | 8 | 最大空闲连接:连接池中容许保持空闲状态的最大连接数量,超过的空闲连接将被释放, 如果设置为负数表示不限制 |
| minIdle | 0 | 最小空闲连接:连接池中容许保持空闲状态的最小连接数量,低于这个数量将创建新的连接, 如果设置为0则不创建 |
| maxWait | 无限 | 最大等待时间:当没有可用连接时,连接池等待连接被归还的最大时间(以毫秒计数)超过时间则抛出异常,如果设置为-1表示无限等待 |
| testOnReturn | false | 是否在归还到池中前进行检验 |
| testWhileIdle | false | 连接是否被空闲连接回收器(如果有)进行检验.如果检测失败, 则连接将被从池中去除.设置为true后如果要生效,validationQuery参数必须设置为非空字符串 |
| minEvictableIdleTimeMillis | 1000 * 60 * 30 | 连接在池中保持空闲而不被空闲连接回收器线程 (如果有)回收的最小时间值,单位毫秒 |
| numTestsPerEvictionRun | 3 | 在每次空闲连接回收器线程(如果有)运行时检查的连接数量 |
| timeBetweenEvictionRunsMillis | -1 | 在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位. 如果设置为非正数,则不运行空闲连接回收器线程 |
| validationQuery | null | SQL查询,用来验证从连接池取出的连接,在将连接返回给调用者之前.如果指定, 则查询必须是一个SQL SELECT并且必须返回至少一行记录 |
| testOnBorrow | true |
是否在从池中取出连接前进行检验,如果检验失败, |
数据库空闲连接超过最大wai_timemout时间,数据库会强行断开空闲的链接,dbcp解决方案
虚拟空间的mysql数据库常设得很低,如wait_timeout=100,在java web 应用中使用dbcp做为连接池,当数据库重启或数据库连接超过设置的最大timemout时间,数据库会强行断开已有的链接,此时当web程序访问数据库时就会出现错误,大致的错误信息java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost,原因是数据库这边已有的连接强行断开,而连接池中不知道已经断开,还是从连接池取出数据库连接交给程序去执行数据库操作,所以导致出错。且我们无法修改配置,这时只能在dbcp连接池上做一些配置。
解决原理:
参数说明
举例:
XX系统的数据库Mysql,dba设置的超时空闲失效时间是100秒(MYSQL如果不设置,默认的是8小时),未加以下参数之前经常报链接失效的错误,加上以下配置后,即可解决。timeBetweenEvictionRunsMillis=48 minEvictableIdleTimeMillis=90,因此当空闲连接在96秒的时候会被检查到超过90秒随后被逐出,然后则创建新的数据库连接。因此timeBetweenEvictionRunsMillis一定要小于100秒,否则检查不出失效连接,但这里也不能设置为51秒,因为第二次检测已经102秒,连接池连接在100秒时就已经与数据库断开!minEvictableIdleTimeMillis要小于100秒,即赶在失效前逐出。

浙公网安备 33010602011771号