欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

DBCP连接池

程序员文章站 2022-04-18 21:29:16
1、DBCP连接池 1.1 DBCP也是一个开源的连接池,是Apache Common成员之一,tomcat内置连接池 db.properties文件 DBCPUtils.java代码 测试代码 连接池配置属性 具体可以参考官网:http://commons.apache.org/proper/co ......

 1、dbcp连接池

  1.1 dbcp也是一个开源的连接池,是apache common成员之一,tomcat内置连接池

  db.properties文件

driver=com.mysql.jdbc.driver
url=jdbc:mysql://localhost:3306/web?useunicode=true&characterencoding=utf8
username=root
password=root

 

  dbcputils.java代码

package com.rookie.bigdata.utils;

import org.apache.commons.dbcp.basicdatasourcefactory;

import javax.sql.datasource;
import java.io.ioexception;
import java.io.inputstream;
import java.sql.connection;
import java.sql.sqlexception;
import java.util.properties;

/**
 * @author
 * @date 2019/1/13
 */
public class dbcputils {
    private static datasource datasource;

    static {
        //加载配置文件
        inputstream resourceasstream = dbcputils.class.getclassloader().getresourceasstream("db.properties");

        try {
            //使用properties处理输入流
            properties properties = new properties();
            properties.load(resourceasstream);
            //创建数据源
            datasource = basicdatasourcefactory.createdatasource(properties);
        } catch (exception e) {
            e.printstacktrace();
        }

    }

    public static datasource getdatasource() {

        return datasource;
    }

    public static connection getconnection() {
        try {
            return datasource.getconnection();
        } catch (sqlexception e) {
            throw  new runtimeexception(e);
        }
    }

}

 

 测试代码

  

package com.rookie.bigdata.utils;

import org.junit.test;

import java.sql.connection;
import java.sql.preparedstatement;
import java.sql.sqlexception;


/**
 * @author
 * @date 2019/1/13
 */
public class dbcputilstest {
    @test
    public void test1() throws sqlexception {
        connection connection = dbcputils.getconnection();

        string sql="insert into h_user values(?,?,?)";
        preparedstatement preparedstatement = connection.preparestatement(sql);

        preparedstatement.setint(1,4);
        preparedstatement.setstring(2,"lisi");
        preparedstatement.setint(3,24);

        int i = preparedstatement.executeupdate();
        system.out.println(i);


    }

}

 

连接池配置属性

  

initialsize  

     初始化连接,连接池启动时创建的初始化连接数量(默认值为0)

maxactive  
     最大活动连接,连接池中可同时连接的最大的连接数(默认值为8)

minidle 
     最小空闲连接,连接池中最小的空闲的连接数,低于这个数量会被创建新的连接(默认为0,该参数越接近maxidle,性能越好,因为连接的创建和销毁,都是需要消耗资源的;但是不能太大,因为在机器很空闲的时候,也会创建低于minidle个数的连接,类似于jvm参数中的xmn设置)

maxidle   
     最大空闲连接,连接池中最大的空闲的连接数,超过的空闲连接将被释放,如果设置为负数表示不限制(默认为8个,maxidle不能设置太小,因为假如在高负载的情况下,连接的打开时间比关闭的时间快,会引起连接池中idle的个数上升超过maxidle,而造成频繁的连接销毁和创建,类似于jvm参数中的xmx设置)

maxwait 
     从池中取连接的最大等待时间,单位ms.当没有可用连接时,连接池等待连接释放的最大时间,超过该时间限制会抛出异常,如果设置-1表示无限等待(默认为无限)

validationquery 
     验证使用的sql语句

testwhileidle    
     指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.

testonborrow    
     借出连接时不要测试,否则很影响性能。一定要配置,因为它的默认值是true。false表示每次从连接池中取出连接时,不需要执行validationquery = "select 1" 中的sql进行测试。若配置为true,对性能有非常大的影响,性能会下降7-10倍。

timebetweenevictionrunsmillis
     每30秒运行一次空闲连接回收器,配置timebetweenevictionrunsmillis = "30000"后,每30秒运行一次空闲连接回收器(独立线程)。并每次检查3个连接,如果连接空闲时间超过30分钟就销毁。销毁连接后,连接数量就少了,如果小于minidle数量,就新建连接,维护数量不少于minidle,过行了新老更替。

minevictableidletimemillis
     池中的连接空闲30分钟后被回收

numtestsperevictionrun
     在每次空闲连接回收器线程(如果有)运行时检查的连接数量

removeabandoned
     连接泄漏回收参数,当可用连接数少于3个时才执行

removeabandonedtimeout
     连接泄漏回收参数,180秒,泄露的连接可以被删除的超时值

 

具体可以参考官网:http://commons.apache.org/proper/commons-dbcp/configuration.html