DBCP参数配置:
属性
默认值
建议值
说明
defaultAutoCommit
true
False
是否自动提交,为false时spring才会接管事务
initialSize
0
[0/1/2]
该参数为连接池启动时创建的初始化连接数量,worker建议0,Web接口1, 压力大的Web接口2,需
要和minIdle保持一致,afs可以设为2
maxActive
8
[10/20/40]
最大活动连接:连接池在同一时间能够分配的最大活动连接的数量,压力小的应用10,worker 20,
特殊应用为40,afs可以设为40
maxIdle
8
[1/2/5/10]
最大空闲连接:连接池中容许保持空闲状态的最大连接数量,超过的空闲连接将被释放,如果设置为
负数表示不限制, worker建议1,压力小的WEB2,普通应用5,压力大的应用10,afs可以设为10
minIdle
0
[0/1/2]
最小空闲连接:连接池中容许保持空闲状态的最小连接数量,低于这个数量将创建新连接,如果设置
为0则不创建, worker建议0,一般选1,2,afs可以设为2
maxWait
无限
15000
最大等待时间:当没有可用连接时,连接池等待连接被归还的最大时间(毫秒),超过时间抛出异
常,设为-1无限等待
validationQuery
无默认值
select 1
sql查询语句,mysql中可以设置为"select 1"
testOnBorrow
True
false
指明是否在从池中取出连接前进行检验,如果检验失败则尝试取新连接。设为true后validationquery
必须设置,数据库在将连接交给DAO前,会事先检验这个连接是否是好的,如果连接有问题(在数据库
端被关闭),则会去其他连接给DAO
testOnReturn
false
不设
指明是否归还到池中前进行检验。设置为true后如果要生效,validationquery必须设置
testWhileIdle
false
true
指明连接是否被空闲连接回收器进行检验,如果检验失败,则连接将被从池中去除,设置为true后如
果要生效,validationquery必须设置
timeBetweenEvictionRunsMillis
-1
120000
空闲连接回收器线程运行的周期,以毫秒为单位。如果设置为非正数,则不运行空闲连接回收器线
程,设置为true后如果要生效,validationquery必须设置,如果要minIdle起作用的话,需要配置
timeBetweenEvictionRunsMillis,如果不配置这两个参数的话,连接池会回收到maxIdle。
numTestsPerEvictionRun
3
不设
在每次空闲连接回收器线程运行时检查的连接数量
minEvictableIdleTimeMillis
1000*60*30
300000
连接在可被空闲连接回收器回收前已经在池中的空闲时间,以毫秒为单位
poolPreparedStatements
false
不设
开启池的prepared statement池功能,设为true时,所有callablestatement和preparedstatement都
会被缓存起来
注意:
- 在mysql中,当空闲连接过期时间interactive-timeout达到设定值时就会自动将连接关闭,此时应用端并不知道,获取连接时就会报“无效连接”异常,前段时间备件库就出现过。要解决这类问题可以设置连接前检验,但如果将testOnBorrow设为true,数据源在将连接交给DAO前,会事先检测这个连接是否是好的,如果连接有问题(在数据库端被关闭),则会取一个其他的连接给DAO。如果每次将连接交给DAO前都检测连接有效性,在高并发的而应用中将会带来性能问题,因为会增加数据库请求。所以我们将testOnBorrow设为false,将testWhileIdle设为true,再设置一个timeBetweenEvictionRunsMillis值。这样DBCP将通过一个后台线程定时对空闲连接进行检测,当发现无用的空闲连接(那些被数据库关闭的连接)时,就会将它们清除掉。只要将timeBetweenEvictionRunsMillis的值设置小于Mysql的interactive-timeout(单位为秒),那些被mysql关闭的连接就会被清除出去。