一张表告诉你如何设置DBCP参数

 

下表是根据pop和青龙的经验整理的DBCP主要参数配置,但有些需要注意的地方,各系统可以根据自身情况参考,有的不一定是最优,可以在实际应用中不断总结修正。

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都

会被缓存起来


注意:

  1. 在mysql中,当空闲连接过期时间interactive-timeout达到设定值时就会自动将连接关闭,此时应用端并不知道,获取连接时就会报“无效连接”异常,前段时间备件库就出现过。要解决这类问题可以设置连接前检验,但如果将testOnBorrow设为true,数据源在将连接交给DAO前,会事先检测这个连接是否是好的,如果连接有问题(在数据库端被关闭),则会取一个其他的连接给DAO。如果每次将连接交给DAO前都检测连接有效性,在高并发的而应用中将会带来性能问题,因为会增加数据库请求。所以我们将testOnBorrow设为false,将testWhileIdle设为true,再设置一个timeBetweenEvictionRunsMillis值。这样DBCP将通过一个后台线程定时对空闲连接进行检测,当发现无用的空闲连接(那些被数据库关闭的连接)时,就会将它们清除掉。只要将timeBetweenEvictionRunsMillis的值设置小于Mysql的interactive-timeout(单位为秒),那些被mysql关闭的连接就会被清除出去。
2. 关于数据源(除了DBS数据源),建议用org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy包装dataSource,这样可以延迟获取数据库连接,缩短连接占用周期,提高并发性 能。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值