spring中配置dbcp连接池

使用ApplicationServer级别的连接池, 在ApplicationServer内的几个webapp间共享连接池以节约总的连接数,也可以为每个webapp独立分配以保证关键应用的供应。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<bean id= "dataSourceDbcp"
         class = "org.apache.commons.dbcp.BasicDataSource" scope= "singleton" >
         <property name= "driverClassName" >
             <value>oracle.jdbc.driver.OracleDriver</value>
         </property>
         <property name= "url" >
             <value>jdbc:oracle:thin: @10 .78. 222.131 : 1521 :mos5100</value>
         </property>
         <property name= "username" >
             <value>inventory</value>
         </property>
         <property name= "password" >
             <value>inventory</value>
         </property>
         <property name= "initialSize" >
             <value> 3 </value>
         </property>
         <property name= "maxActive" >
             <value> 50 </value>
         </property>
     </bean>

( 以下内容摘在springside):

DBCP的性能配置主要是4个参数

#连接池启动时的初始值.

  • dbcp.initialSize=10

#连接池的最大值.

  • dbcp.maxActive=50

#最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止。

  • dbcp.maxIdle=20

#最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请。

  • dbcp.minIdle=5

一般这几个参数应该放在applicationContext.properties里方便部署时快速修改。

有两种配置风格,

  •   比如较少使用者的管理界面,平时的使用者不多,但瞬时可能会有较多的使用者,如Mini-Web,会设置一个较低的maxIdle 而设置较高的maxActive。
  •   比如长期高负荷运行的业务系统,会设置一个合理的maxIdle值,且maxActive==maxIdle
长期idle连接的处理:

Mysql服务端会断开超过8小时的空闲连接,如果系统只在白天工作时间被使用,DBCP的连接就很容易被断开的连接,而且DBCP对jdbc url里设置autoReconnect=true是无效。

更好的做法DBCP主动断开超时的连接。

#运行判断连接超时任务的时间间隔,单位为毫秒,默认为-1,即不执行任务。
timeBetweenEvictionRunsMillis=3600000

#连接的超时时间,默认为半小时。
minEvictableIdleTimeMillis=3600000

经测试,按上面的设置,DBCP会在连接idle两小时后将其断开。

猜你喜欢

转载自grey2.iteye.com/blog/1393922