DBCP连接池
程序员文章站
2024-01-23 09:01:10
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