数据库连接池_DBCP/C3P0

数据库连接池

数据库连接池负责分配,管理,释放数据库连接,允许程序重复使用现有的数据库连接,避免了频繁的创建数据库连接。
JDBC提供了DataSource接口用来与数据库建立连接并返回Connection对象。实现DataSource接口的类被称为数据源,常见的数据源有DBCP和C3P0.


DBCP数据源

使用DBCP数据源需要导入两个JAR包:

  1. commons-dbcp.jar是DBCP数据源的实现包。
  2. commons-pool.jar是实现包的依赖包。

实现包中包含的两个核心的类:BasicDataSource和BasicDataSourceFactory

  1. BasicDataSource是DataSource接口的实现类,主要包含设置数据源对象的方法
public class DBCP01 {
    //通过BasicDataSource类创建数据源对象
    public static DataSource dataSource = null;
    static{
        BasicDataSource basicDataSource = new BasicDataSource();
        basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        basicDataSource.setUrl("jdbc:mysql://localhost:3306/jdbc");
        basicDataSource.setUsername("root");
        basicDataSource.setPassword("123456");
        basicDataSource.setInitialSize(5); //初始化连接数
        basicDataSource.setMaxTotal(5); //最大活跃连接数(dbcp中是MaxActive,dbcp2中改为MaxTotal)
        dataSource = basicDataSource;
    }
    public static void main(String[] args) throws SQLException {
        Connection connection = dataSource.getConnection();
    }
}
  1. BasicDataSourceFactory是一个工厂方法,包含一个createDataSource()方法,通过读取配置文件的信息生成BasicDataSource对象。
    a)创建dbcpconfig.properties配置文件
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc
username=root
password=123456
initialSize=5
maxTotal=5

b)生成BasicDataSource对象

public class DBCP02 {
    //通过配置文件创建数据源对象
    public static DataSource dataSource = null;
    static{
        Properties properties = new Properties(); //创建配置文件对象
        try{
            // 通过类加载器找到文件路径,读配置文件
            InputStream in = new DBCP02().getClass().getClassLoader().getResourceAsStream("dbcpconfig.properties");
            properties.load(in); // 把文件以输入流的形式加载到配置对象中
            dataSource = BasicDataSourceFactory.createDataSource(properties); //创建数据源对象
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) throws SQLException {
        Connection connection = dataSource.getConnection();
    }
}

C3P0数据源

导入c3p0.jar,可以使用ComboPooledDataSource类创建数据源对象,有两个构造方法:

  1. ComboPooledDataSource()创建后需要设置属性值。
public class C3P0 {
    public static DataSource dataSource = null;
    static{
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
        try{
            comboPooledDataSource.setDriverClass("com.mysql.jdbc.Driver");
            comboPooledDataSource.setJdbcUrl("jdbc:mysql://localhost:3306/jdbc");
            comboPooledDataSource.setUser("root");
            comboPooledDataSource.setPassword("123456");
            comboPooledDataSource.setInitialPoolSize(5);
            comboPooledDataSource.setMaxPoolSize(5);
            dataSource=comboPooledDataSource;
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) throws SQLException {
        Connection connection = dataSource.getConnection();
    }
}
  1. 通过配置文件创建数据源对象
    a)创建c3p0-config.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc</property>
        <property name="user">root</property>
        <property name="password">123456</property>
        <property name="checkoutTimeout">30000</property>
        <property name="initialPoolSize">10</property>
        <property name="maxIdleTime">30</property>
        <property name="maxPoolSize">100</property>
        <property name="minPoolSize">10</property>
        <property name="maxStatements">200</property>
    </default-config>
    <named-config name="itcast">
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc</property>
        <property name="user">root</property>
        <property name="password">123456</property>
        <property name="initialPoolSize">10</property>
        <property name="maxPoolSize">100</property>
    </named-config>
</c3p0-config>

配置了两套数据源<default-config>是默认配置,<named-config name="itcast">是自定义配置。可以创建多套自定义配置,使用时传递name值给ComboPooledDataSource即可。
b)创建C3P0数据源对象

public class C3P0 {
    public static DataSource dataSource = null;
    static{
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource("itcast");
        dataSource = comboPooledDataSource;
    }
    public static void main(String[] args) throws SQLException {
        Connection connection = dataSource.getConnection();
    }
}

注意:

  1. 配置文件名称必须为c3p0-config.xml或者c3p0.xml,并放在项目的src根目录下。
  2. 当传入ComboPooledDataSource的参数为空或不存在时,使用默认方式创建数据源。
posted @ 2022-08-06 17:19  独游空想家  阅读(99)  评论(0编辑  收藏  举报