DBCP连接池
Posted 海之浪子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DBCP连接池相关的知识,希望对你有一定的参考价值。
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
以上是关于DBCP连接池的主要内容,如果未能解决你的问题,请参考以下文章