1.在conf/context.xml下加入配置

    <Context>
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
        <Resource name="jdbc/oracleDb"      
            auth="Container"  
            type="javax.sql.DataSource"  
            driverClassName="oracle.jdbc.OracleDriver"  
            url="jdbc:oracle:thin:@192.168.10.92:1521:orcl"  
            username="xxjsb"  
            password="xxjsb"  
            maxActive="500"  
            maxIdle="500"  
            maxWait="36000"  
    	    #解决网络超时或者断网或者数据库重启的问题
    	    logAbandoned="true"  
    	    removeAbandoned="true" 
    	    removeAbandonedTimeout="10"
    	    #DBCP连接池的自我检测
    	    validationQuery = "select 1 from dual"
    	    testWhileIdle = "true"
    	    testOnBorrow = "false"
    	    timeBetweenEvictionRunsMillis = "30000"
    	    minEvictableIdleTimeMillis = "1800000"
    	    numTestsPerEvictionRun="3"
        /> 
    	<Resource name="jdbc/extendDataNo1"      
            auth="Container"  
            type="javax.sql.DataSource"  
            driverClassName="oracle.jdbc.OracleDriver"  
            url="jdbc:oracle:thin:@192.168.10.92:1521:orcl"  
            username="middle"  
            password="middle"  
            maxActive="30"  
            maxIdle="20"  
            maxWait="36000"
         /> 
    </Context>

spring配置文件增加数据源引用(如:dataSourceContext.xml)

    <beans>
    	<bean id="dataSource"  class="org.springframework.jndi.JndiObjectFactoryBean">  
            <property name="jndiName" value="java:comp/env/jdbc/oracleDb"/>  
        </bean> 
    	<bean id="extendDataNo1"  class="org.springframework.jndi.JndiObjectFactoryBean">  
            <property name="jndiName" value="java:comp/env/jdbc/extendDataNo1"/>  
        </bean>
    </beans>

参数说明:

<parame 
    maxActive="最大激活连接数,这里取值为500,表示同时最多有500个数据库连接"  
    maxIdle="最大的空闲连接数,这里取值为500,表示即使没有数据库连接时依然可以保持500空闲的连接,
    		而不被清除,随时处于待命状态"  
    maxWait="连接最大的等待时间,单位毫秒,如果超过此时间将接到异常.设为-1表示无限制"
    #解决网络超时或者断网或者数据库重启的问题
    logAbandoned="true"  
    removeAbandoned="true" 
    removeAbandonedTimeout="连接泄漏回收参数,单位秒,泄露的连接可以被删除的超时值"
    #DBCP连接池的自我检测
    validationQuery="验证连接是否可用,使用的SQL语句"  
    testWhileIdle="指明连接是否被空闲连接回收器(如果有)进行检验.
    				如果检测失败,则连接将被从池中去除"      .
    testOnBorrow="借出连接时不要测试,否则很影响性能"
    timeBetweenEvictionRunsMillis = "每30秒运行一次空闲连接回收器,单位毫秒"  
    minEvictableIdleTimeMillis = "池中的连接空闲30分钟后被回收,默认值就是30分钟,单位毫秒"
    numTestsPerEvictionRun="在每次空闲连接回收器线程(如果有)运行时检查的连接数量,默认值就是3" 
    #DBCP连接池的自我检测解释:
    配置 timeBetweenEvictionRunsMillis = "30000"后,每30秒运行一次空闲连接回收器(独立线程),并每次检查3个连接,如果连接空闲时间超过30分钟就销毁.
    销毁连接后,连接数量就少了,如果小于'minIdle'数量,就新建连接,维护数量不少于'minIdle'.
    testWhileIdle = "true" 表示每30秒,取出3条连接,使用'validationQuery'中的SQL进行测试,测试不成功就销毁连接.销毁连接后,
    连接数量就少了,如果小于'minIdle'数量,就新建连接.
    testOnBorrow = "false" 一定要配置,因为它的默认值是true.false表示每次从连接池中取出连接时,不需要执行'validationQuery'
    中的SQL进行测试.若配置为true,对性能有非常大的影响,性能会下降7-10倍.所在一定要配置为false.
    每30秒,取出'numTestsPerEvictionRun'条连接(本例是3,也是默认值),发出"SELECT 1" SQL语句进行测试 ,测试过的连接不算是“被使用”了,
    还算是空闲的.连接空闲30分钟后会被销毁.
 />

4-注意事项
'maxIdle'值与'maxActive'值应配置的接近。
因为,当连接数超过maxIdle值后,刚刚使用完的连接(刚刚空闲下来)会立即被销毁.
而不是我想要的空闲M秒后再销毁起一个缓冲作用.这一点DBCP做的可能与你想像的不一样;
若'maxIdle'与'maxActive'相差较大,在高负载的系统中会导致频繁的创建、销毁连接,
连接数在'maxIdle'与'maxActive'间快速频繁波动,这不是我想要的;


啦啦啦!