DBCP、C3P0、Druid连接池的使用(java)

使用步骤

  • 导入相应jar包(下述以mysql驱动包为例)
  • 添加配置文件 (配置文件必须放在src目录下)
  • 编写对应工具类对数据库进行增删改查操作

1.DBCP连接池

DBCP(DataBase Connection Pool),[数据库连接池]。是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要2个包:commons-dbcp.jar,commons-pool.jar由于建立数据库连接是一个非常耗时的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。

1.1导入相应jar包

mysql驱动包

   commons-dbcp.jar

   commons-pool.jar

  commons-logging.jar 日志支持

1.2添加配置文件

dbcp.properties 使用时可直接直接以下属性copy到配置文件中

#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/myschool?useSSL=true&characterEncoding=utf8
username=root
password=root
#<!-- 初始化连接 -->
initialSize=10
#最大连接数量
maxTotal=50
#<!-- 最大空闲连接 -->
maxIdle=20
#<!-- 最小空闲连接 -->
minIdle=5
#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWaitMillis=5000

1.3编写工具类DbUtils_DBCP

  • 类加载器获取配置文件
  • 参数传递配置文件,自动加载属性值,并生成连接池对象
  • 编写方法返回连接池对象
public class DbUtils_DBCP {
    private static BasicDataSource dataSource = null;
    static {
        try {
            Properties properties = new Properties();
            //类加载器获取配置文件
            InputStream is = DbUtils_DBCP.class.getClassLoader().getResourceAsStream("dbcp.properties");
            properties.load(is);
            is.close();
            //参数传递配置文件,自动加载属性值
            dataSource = BasicDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //返回连接池对象
    public static DataSource getDataSource(){
        return dataSource;
    }
}

测试代码:

因为在配置文件中设置最大连接数为50,所以超过50将不能再连接,除非前50个被释放

所以在链接使用完成后应该立即释放资源,将其重新放回到连接池中,以便被别人使用。

conn.close();//不代表关闭该连接对象,而是将连接对象归还给连接池

     @Test
    public void testGetDataSource(){
        DataSource dataSource = DbUtils_DBCP.getDataSource();
        for (int i = 0; i < 100; i++) {
            try {
                Connection conn = dataSource.getConnection();
                System.out.println(i+"连接"+conn.hashCode()+"成功!");
                conn.close();//不代表关闭该连接对象,而是将连接对象归还给连接池
            } catch (SQLException e) {
//                e.printStackTrace();
                System.out.println("连接超时,请重新连接......");
            }

        }
    }

 

2.C3P0连接池

C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。

2.1导入jar包

c3p0-0.9.1.2.jar

mchange-commons-java-0.2.11.jar

mysql驱动包

2.2添加配置文件

c3p0是在外部添加配置文件,工具直接进行应用,因为直接引用,所以要求固定的命名和文件位置

c3p0.properties 注意:c3p0的配置文件其文件名不能改变

并且c3p0的配置文件属性都带前缀 c3p0.xx=xxx

c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/myschool?useSSL=true&characterEncoding=utf8
c3p0.user=root
c3p0.password=root
c3p0.acquireIncrement=5
c3p0.initialPoolSize=20
c3p0.minPoolSize=10
c3p0.maxPoolSize=50
c3p0.checkoutTimeout=5000

也可以用XML文件:

文件命名:c3p0-config.xml/c3p0.properties

<c3p0-config>
	<!-- 默认配置,如果没有指定则使用这个配置 -->
	<default-config>
		<!-- 基本配置 -->
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/school</property>
		<property name="user">root</property>
		<property name="password">root</property>
		<!--扩展配置-->
		<!-- 连接超过10秒报错-->
		<property name="checkoutTimeout">10000</property>
		<!--30秒检查空闲连接 -->
		<property name="idleConnectionTestPeriod">30</property>
		<!-- 初始大小 -->
		<property name="initialPoolSize">10</property>
		<!-- 每次增长的个数 -->
		<property name="acquireIncrement">5</property>
		 <!-- 30秒不适用丢弃-->
		<property name="maxIdleTime">30</property>
		<property name="maxPoolSize">50</property>
		<property name="minPoolSize">5</property>
	</default-config> 
	<!-- 命名的配置 -->
	<named-config name="bj1805">
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/day2</property>
		<property name="user">root</property>
		<property name="password">111</property>
		<!-- 如果池中数据连接不够时一次增长多少个 -->
		<property name="acquireIncrement">5</property>
		<property name="initialPoolSize">20</property>
		<property name="minPoolSize">10</property>
        <property name="maxPoolSize">40</property>
	</named-config>
</c3p0-config> 

注意:

1: c3p0的配置文件内部可以包含命名配置文件和默认配置文件!默认是选择默认配置!如果需要切换命名配置可以在创建c3p0连接池的时候填入命名即可!

2:如果xml配置文件和属性文件都存在时,xml优先级高于属性文件

2.3编写工具类DbUtils_c3p0

c3p0不需要手动加载配置文件,在创建连接池是系统就回自动加载匹配文件及相应属性值

  • 创建连接池对象
  • 放回连接池对象
public class DbUtils_c3p0 {
    private static ComboPooledDataSource dataSource = null;
    static{
        try {
            dataSource = new ComboPooledDataSource();
        } catch (Exception e) {
            throw new RuntimeException("获取连接池失败!",e);
        }
    }

    public static DataSource getDataSource(){
        return dataSource;
    }
}

测试代码:

因为在配置文件中设置最大连接数为50,所以超过50将不能再连接,除非前50个被释放

所以在链接使用完成后应该立即释放资源,将其重新放回到连接池中,以便被别人使用。

conn.close();//不代表关闭该连接对象,而是将连接对象归还给连接池

    @Test
    public void testGetDataSource(){
        DataSource dataSource = DbUtils_c3p0.getDataSource();
        for (int i = 0; i < 100; i++) {
            try {
                Connection conn = dataSource.getConnection();
                System.out.println(i+"连接"+conn.hashCode()+"成功!");
                conn.close();//不代表关闭该连接对象,而是将连接对象归还给连接池
            } catch (SQLException e) {
//                e.printStackTrace();
                System.out.println("连接超时,请重新连接......");
            }

        }
    }

3.Druid连接池(重点,必会

Druid 是目前比较流行的高性能的,分布式列存储的OLAP框架(具体来说是MOLAP)。它有如下几个特点:
一. 亚秒级查询
     druid提供了快速的聚合能力以及亚秒级的OLAP查询能力,多租户的设计,是面向用户分析应用的理想方式。
二.实时数据注入
     druid支持流数据的注入,并提供了数据的事件驱动,保证在实时和离线环境下事件的实效性和统一性
三.可扩展的PB级存储
     druid集群可以很方便的扩容到PB的数据量,每秒百万级别的数据注入。即便在加大数据规模的情况下,也能保证时其效性
四.多环境部署
     druid既可以运行在商业的硬件上,也可以运行在云上。它可以从多种数据系统中注入数据,包括hadoop,spark,kafka,storm和samza等
五.丰富的社区
     druid拥有丰富的社区,供大家学习

3.1导入jar包

druid-1.1.5.jar

3.2添加配置文件

druid.properties

#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/myschool?useSSL=true&characterEncoding=utf8
username=root
password=root
#<!-- 初始化连接 -->
initialSize=10
#最大连接数量
maxActive=50
#<!-- 最小空闲连接 -->
minIdle=5
#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWait=5000

3.3编写工具类DbUtils_Druid

  • 类加载器获取配置文件
  • 参数传递配置文件,自动加载属性值,并生成连接池对象
  • 编写方法返回连接池对象
public class DbUtils_Druid {
    private static DruidDataSource dataSource = null;
    static {
        try {
            //加载配置文件
            Properties prop = new Properties();
            InputStream is = DbUtils_Druid.class.getClassLoader().getResourceAsStream("druid.properties");
            prop.load(is);
            is.close();
            //创建连接池
            dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(prop);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //返回连接池对象
    public static DataSource getDataSource(){
        return dataSource;
    }
}

测试代码:

因为在配置文件中设置最大连接数为50,所以超过50将不能再连接,除非前50个被释放

所以在链接使用完成后应该立即释放资源,将其重新放回到连接池中,以便被别人使用。

conn.close();//不代表关闭该连接对象,而是将连接对象归还给连接池

    @Test
    public void testGetDataSource(){
        DataSource dataSource = DbUtils_Druid.getDataSource();
        for (int i = 0; i < 100; i++) {
            try {
                Connection conn = dataSource.getConnection();
                System.out.println(i+"连接"+conn.hashCode()+"成功!");
                conn.close();//不代表关闭该连接对象,而是将连接对象归还给连接池
            } catch (SQLException e) {
//                e.printStackTrace();
                System.out.println("连接超时,请重新连接......");
            }

        }
    }

*****以上三种方式都可以使用硬编码方式将所有属性逐一设置,不让连接池对象自动加载,此处不做演示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
好的,我会回答你的问题,以下是常用数据库连接池 DBCPc3p0Druid 的配置说明: 1. DBCP (Apache Commons DBCP) DBCP 是 Apache Commons 项目中的一个子项目,它是一个纯 Java 实现的数据库连接池DBCP使用非常简单,只需要引入相关的 jar 即可。以下是 DBCP 的配置说明: ``` # 最大连接数 maxActive=100 # 最大空闲连接数 maxIdle=30 # 最小空闲连接数 minIdle=10 # 获取连接时的最大等待时间,单位为毫秒 maxWait=10000 # 是否开启自动回收空闲连接的线程 removeAbandoned=true # 回收超时时间,单位为秒 removeAbandonedTimeout=180 # 是否开启缓存 PreparedStatement,提高性能 poolPreparedStatements=true # 缓存 PreparedStatement 的最大数量 maxOpenPreparedStatements=100 ``` 2. c3p0 c3p0 是一个开源的 JDBC 数据库连接池,它实现了数据源和 JNDI 绑定,支持 JDBC3 的 Connection 和 Statement 缓存以及 JDBC4 的自动化管理。以下是 c3p0 的配置说明: ``` # 最大连接数 c3p0.maxPoolSize=100 # 最小连接数 c3p0.minPoolSize=10 # 初始化连接数 c3p0.initialPoolSize=10 # 获取连接时的最大等待时间,单位为毫秒 c3p0.checkoutTimeout=10000 # 是否自动回收超时连接 c3p0.autoCommitOnClose=true # 是否开启自动回收空闲连接的线程 c3p0.idleConnectionTestPeriod=60 # 回收超时时间,单位为秒 c3p0.maxIdleTime=1800 # 是否开启缓存 PreparedStatement,提高性能 c3p0.cachePreparedStatements=true # 缓存 PreparedStatement 的最大数量 c3p0.maxStatements=100 ``` 3. Druid Druid 是阿里巴巴开源的一个高性能、可扩展、功能强大的数据库连接池。它主要提供了以下功能:监控统计、防御 SQL 注入、批量处理、数据源加密、日志记录等。以下是 Druid 的配置说明: ``` # 最大连接数 druid.maxActive=100 # 最大空闲连接数 druid.maxIdle=30 # 最小空闲连接数 druid.minIdle=10 # 获取连接时的最大等待时间,单位为毫秒 druid.maxWait=10000 # 是否开启自动回收空闲连接的线程 druid.removeAbandoned=true # 回收超时时间,单位为秒 druid.removeAbandonedTimeout=180 # 是否开启缓存 PreparedStatement,提高性能 druid.poolPreparedStatements=true # 缓存 PreparedStatement 的最大数量 druid.maxOpenPreparedStatements=100 # 是否开启 SQL 执行监控 druid.stat=true # 是否开启防御 SQL 注入功能 druid.filters=stat,wall,log4j ``` 以上就是常用数据库连接池 DBCPc3p0Druid 的配置说明。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值