数据库连接池_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 @   独游空想家  阅读(100)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示