Java连接池详解(二)
2017-05-09 19:30
549 查看
C3P0连接池
c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0一般是与Hibernate,Spring等框架一块使用的,当然也可以单独使用。dbcp没有自动回收空闲连接的功能,c3p0有自动回收空闲连接功能。
使用c3p0需要导入c3p0.jar、mchange-commons-.jar,如果操作的是Oracle数据库,那么还需要导入c3p0-oracle-thin-extras-pre1.jar。
在类目录下加入C3P0的配置文件:c3p0-config.xml
[html] view
plaincopyprint?
<c3p0-config>
<!-- C3P0的缺省(默认)配置,-->
<!-- 如果在代码中“ComboPooledDataSourceds = new ComboPooledDataSource();”这样写就表示使用的是C3P0的缺省(默认)配置信息来创建数据源 -->
<default-config>
<property name="driverClass">com.mys
4000
ql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/anysearch</property>
<property name="user">root</property>
<property name="password">123456</property>
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default:3 -->
<property name="acquireIncrement">5</property>
<!--初始化的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3-->
<property name="initialPoolSize">10</property>
<!--连接池中保留的最小连接数-->
<property name="minPoolSize">5</property>
<!--连接池中保留的最大连接数。Default:15 -->
<property name="maxPoolSize">20</property>
<!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
<property name="acquireRetryAttempts">30</property>
<!--两次连接中间隔时间,单位毫秒。Default: 1000 -->
<property name="acquireRetryDelay">1000</property>
<!--连接关闭时默认将所有未提交的操作回滚。Default: false -->
<property name="autoCommitOnClose">false</property>
</default-config>
<!-- C3P0的命名配置,-->
<!-- 如果在代码中“ComboPooledDataSourceds = new ComboPooledDataSource("MySQL");”这样写就表示使用的是name是MySQL的配置信息来创建数据源 -->
<named-config name="MySQL">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/test2</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="acquireIncrement">5</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">5</property>
<property name="maxPoolSize">20</property>
</named-config>
</c3p0-config>
还有更多可设置的参数,具体可查阅相关资料。
在获取数据库连接的工具类(如jdbcUtils)的静态代码块中创建池
[java] view
plaincopyprint?
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class JdbcUtils_C3P0 {
private static ComboPooledDataSource ds =null;
//在静态代码块中创建数据库连接池
static{
try{
//通过代码创建C3P0数据库连接池
/*ds = new ComboPooledDataSource();
ds.setDriverClass("com.mysql.jdbc.Driver");
ds.setJdbcUrl("jdbc:mysql://localhost:3306/test");
ds.setUser("root");
ds.setPassword("123456");
ds.setInitialPoolSize(10);
ds.setMinPoolSize(5);
ds.setMaxPoolSize(20);*/
//通过读取C3P0的xml配置文件创建数据源,C3P0的xml配置文件c3p0-config.xml必须放在src目录下
//ds = newComboPooledDataSource();//使用C3P0的默认配置来创建数据源
ds = newComboPooledDataSource("MySQL");//使用C3P0的命名配置来创建数据源
}catch (Exception e) {
throw newExceptionInInitializerError(e);
}
}
//从数据源中获取数据库连接
public static Connection getConnection()throws SQLException{
//从数据源中获取数据库连接
return ds.getConnection();
}
//释放链接
public static void release(Connection conn){
if(conn!=null){
try{
//将Connection连接对象还给数据库连接池
conn.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
在应用中获取连接
[java] view
plaincopyprint?
Connection conn = null;
PreparedStatement st = null;
ResultSet rs = null;
try{
//获取数据库连接
conn = JdbcUtils_C3P0.getConnection();
……
}catch (Exception e) {
e.printStackTrace();
}finally{
//释放资源
JdbcUtils_C3P0release(conn);
}
其他连接池
proxool和 c3p0能够更好的支持高并发,但是在稳定性方面略逊于dpcp。
可根据项目的实际需要来选择连接池。
相关文章推荐
- 【JavaWeb-21】多对多关系、类和关联级别的加载策略、HQL查询详解、Hibernate连接池配置、Hibernate里悲观锁乐观锁使用
- java 配数据源连接池详解
- Java连接池详解
- Java连接池详解
- Java连接池详解 tomcat
- java连接池详解
- 数据库阿里连接池 druid配置详解 标签: druidspringjavaxml配置阿里池 2016-06-16 00:34 57532人阅读 评论(11) 收藏 举报 版权声明:本文为博主原创文
- Java Hibernate 之连接池详解
- java 数据库连接池 c3p0 使用及参数详解,支持重连
- Java连接池详解
- JAVAWEB开发之Tomcat内置连接池的配置和使用、DbUtils的使用详解和案例、以及元数据详解
- Java连接池详解
- java连接池配置详解
- JAVA中数据库连接池原理机制详解
- JAVAWEB开发之事务详解(mysql与JDBC下使用方法、事务的特性、锁机制)和连接池的详细使用(dbcp以c3p0)
- java 数据库连接池 c3p0 使用及参数详解,支持重连
- java连接池详解(一)
- Java连接池详解
- Java连接池详解
- Java连接池详解