Javaweb学习笔记之JDBC(十一):DBCP连接池 和 C3P0连接池

package com.demo.datasource;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.junit.Test;

import javax.sql.DataSource;
import java.sql.Connection;
import java.util.Properties;

/**
 * 数据库连接池:管理连接
 *  Sun 公司规定,如果是连接池技术,必须实现接口 java.sql.DataSource;
 *
 * 常用的开源连接池技术:
 *  DBCP 连接池;
 *  C3P0 连接池;
 *
 * DBCP 连接池:
 *  DBCP 是 Apache 软件基金组织下的开源连接池实现,使用 DBCP 连接池,要导入下面两个包:
 *      commons-dbcp-1.4.jar    连接池的实现
 *      commons-pool-1.5.6.jar  连接池实现的依赖库
 *  Tomcat 的连接池正是采用该连接池实现的。该连接池既可以与应用服务器整合使用,也可由应用程序独立使用。
 *  核心类:BasicDataSource
 *
 * C3P0 连接池:
 *  最常用的连接池技术;Spring 框架,默认支持 C3P0 连接池技术;
 *  引入 jar 包:c3p0-0.9.1.2.jar
 *  核心类:ComboPooledDataSource
 */
public class Demo1 {

    /**
     * 编码方式实现 DBCP 连接池
     */
    @Test
    public void test1() throws Exception{
        // DBCP 连接池核心类
        BasicDataSource dataSource = new BasicDataSource();

        // 连接池参数配置:初始化连接数、最大连接数、连接字符串、驱动类、用户名、密码
        dataSource.setInitialSize(3);                           // 初始化连接数
        dataSource.setMaxActive(10);                            // 最大连接数
        dataSource.setMaxIdle(3000);                            // 最大空闲时间,单位:秒(当一个连接池 3 秒没被使用,就会自动关闭)
        dataSource.setUrl("jdbc:mysql://localhost:3306/day17"); // 数据库连接字符串
        dataSource.setDriverClassName("com.mysql.jdbc.Driver"); // 数据库驱动类
        dataSource.setUsername("root");                         // 连接用户名
        dataSource.setPassword("root");                         // 连接密码

        // 获取数据库连接
        Connection connection = dataSource.getConnection();
        // 执行 sql 语句
        connection.prepareStatement("delete from users where id=4").executeUpdate();
        // 关闭连接
        connection.close();
    }

    /**
     * 配置文件方式实现 DBCP 连接池(推荐使用)
     */
    @Test
    public void test2() throws Exception{
        // 加载 properties 配置文件
        Properties prop = new Properties();
        prop.load(Demo1.class.getResourceAsStream("/dbcp.properties"));

        // 使用 配置文件实例化 DataSource 对象
        DataSource dataSource = BasicDataSourceFactory.createDataSource(prop);

        // 获取数据库连接
        Connection connection = dataSource.getConnection();
        // 执行 sql 语句
        connection.prepareStatement("delete from users where id=3").executeUpdate();
        // 关闭
        connection.close();
    }

    /**
     * 编码方式实现 C3P0 连接池
     */
    @Test
    public void test3() throws Exception{
        // 创建连接池核心工具类
        ComboPooledDataSource dataSource = new ComboPooledDataSource();

        // 设置连接参数:url、驱动、用户名、密码、初始连接数、最大连接数、最大空闲时间
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/day17");
        dataSource.setDriverClass("com.mysql.jdbc.Driver");
        dataSource.setUser("root");
        dataSource.setPassword("root");
        dataSource.setInitialPoolSize(3);
        dataSource.setMaxPoolSize(10);
        dataSource.setMaxIdleTime(3000);

        // 获取数据库连接
        Connection connection = dataSource.getConnection();
        // 执行 sql
        connection.prepareStatement("delete from users where id=2").executeUpdate();
        // 关闭连接
        connection.close();
    }

    /**
     * 配置文件 方式实现 C3P0 连接池
     */
    @Test
    public void test4() throws Exception{
        // 创建 C3P0 连接池核心工具类
        // 自动加载 src 目录下 C3P0 的配置文件(默认名为 c3p0-config.xml,不需要修改)
        // 默认调用的是 <default-config> 配置的连接池
//        ComboPooledDataSource dataSource = new ComboPooledDataSource();

        // 如果配置文件中配置了多个连接池,可以通过 configName 调用指定的连接池
//        ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql_config");

        // 如果 configName 写错了,找不到指定的连接池,那么就会自动去调用默认配置的连接池(<default-config>)
        ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql_configsss");

        // 获取数据库连接
        Connection connection = dataSource.getConnection();
        // 执行 sql
        connection.prepareStatement("delete from users where id=1").executeUpdate();
        // 关闭连接
        connection.close();
    }
}

其中 dbcp.properties:

url = jdbc:mysql://localhost:3306/day17
username = root
password = root
driverClassName = com.mysql.jdbc.Driver
initialSize = 3
maxActive = 10
maxIdle = 3000

其中 c3p0-config.xml:

<c3p0-config>
    <default-config>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/day17</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="initialPoolSize">3</property>
        <property name="maxPoolSize">10</property>
        <property name="maxIdleTime">3000</property>
    </default-config>

    <!-- 可以配置多个数据库连接池,通过 name 属性调用 -->
    <named-config name="mysql_config">
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/day17</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="initialPoolSize">3</property>
        <property name="maxPoolSize">10</property>
        <property name="maxIdleTime">3000</property>
    </named-config>
</c3p0-config>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值