数据库连接池_DBCP/C3P0
数据库连接池
数据库连接池负责分配,管理,释放数据库连接,允许程序重复使用现有的数据库连接,避免了频繁的创建数据库连接。
JDBC提供了DataSource接口用来与数据库建立连接并返回Connection对象。实现DataSource接口的类被称为数据源,常见的数据源有DBCP和C3P0.
DBCP数据源
使用DBCP数据源需要导入两个JAR包:
commons-dbcp.jar
是DBCP数据源的实现包。commons-pool.jar
是实现包的依赖包。
实现包中包含的两个核心的类:BasicDataSource和BasicDataSourceFactory
- 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();
}
}
- 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类创建数据源对象,有两个构造方法:
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();
}
}
- 通过配置文件创建数据源对象
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();
}
}
注意:
- 配置文件名称必须为c3p0-config.xml或者c3p0.xml,并放在项目的src根目录下。
- 当传入ComboPooledDataSource的参数为空或不存在时,使用默认方式创建数据源。
本文来自博客园,作者:独游空想家,转载请注明原文链接:https://www.cnblogs.com/linzhikai/p/16555821.html