首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

自定义JDBC连接池及惯用连接池介绍

2012-11-08 
自定义JDBC连接池及常用连接池介绍[coolxing按: 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正.]?如

自定义JDBC连接池及常用连接池介绍

[coolxing按: 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正.]

?

如果不采用连接池技术, 将导致不断创建和销毁数据库Connection, 造成性能上的损耗. 而数据库连接池技术将在池中创建一定数量的Connection, 当需要Connection时就从池中取出一个, 用完之后归还给连接池, 而不是将其销毁.

自定义数据库连接池的具体步骤分析:

a. 定义MyDataSource类, 实现DataSource接口, 并提供接口中定义的方法. 其中, 核心方法为Connection getConnection().

b. 可以在静态代码块或构造函数中创建多个Connection对象, 并将他们存储在LinkedList中. 当调用MyDataSource对象的getConnection()方法时, 从集合中取出一个Connection返回给调用者. 当调用者使用完Connection并调用Connection对象的close()方法时, 将该Connection对象归还给连接池.

c. 调用Connection对象的close()方法时, 为阻止系统销毁该连接, 而改为将连接归还给连接池, 可以采用包装设计模式. 此时包装的目标类为Connection, 因此需要定义MyConnection类并实现Connection接口. MyConnection类应该存在2个成员: Connection对象和LinkedList<Connection>对象, 这2个成员可以通过构造函数存入. 同时需要覆写close()方法, 在close()方法中实现将Connection添加到集合中.

代码如下:

?

以下是测试代码:

?

程序的输出为:

?

获取连接之后, 连接池中的Connection对象的数量为: 9

id = 6, name = min, age = 22

id = 7, name = coolxing, age = 24

将连接归还给连接池后, 连接池中的Connection对象的数量为: 10

可见这个自定义的连接池是可以工作的.

?

自定义数据库连接池只是为了学习JDBC连接池的原理, 平时项目使用的时候, 还是应该以开源的数据库连接池为主.?

常用的数据库连接池为DBCP, C3P0, 以及TOMCAT内置的连接池. 下面简单的介绍以下前两者的使用.

?

1. DBCP连接池使用步骤:

a. 导入Commons-dbcp.jar和Commons-pool.jar到project中.

b. 获取数据源DataSource对象. 可以直接创建BasicDataSource对象后调用相应的set方法, 如:

DataSource pool = new BasicDataSource();

pool.setUrl("jdbc:mysql://localhost:3306/exercise");

pool.setUsername("root");

pool.setPassword("root");

pool.setDriverClassName("com.mysql.jdbc.Driver");

pool.setInitialSize(10);

也可以通过工厂类加载配置文件获得DataSource对象, 如:

Properties prop = new Properties();

InputStream in = JDBCPool.class.getClassLoader().getResourceAsStream("dbcp.properties");

prop.load(in);

DataSource pool = BasicDataSourceFactory.createDataSource(prop);

c. 调用DataSource对象的getConnection()方法获得连接.

?

2. C3P0连接池的使用步骤:

a. 导入c3p0-0.9.1.2.jar和c3p0-0.9.1.2-jdk1.3.jar.

b. 获取数据源DataSource对象. 可以直接创建ComboPooledDataSource对象后调用相应的set方法, 如:

ComboPooledDataSource pool = new ComboPooledDataSource();

pool.setJdbcUrl("jdbc:mysql://localhost:3306/exercise");

pool.setUser("root");

pool.setPassword("root");

pool.setDriverClass("com.mysql.jdbc.Driver");

pool.setInitialPoolSize(10);

也可以在创建ComboPooledDataSource对象时传入配置节点的名称, 此时需要存在c3p0-config.xml文件. 如:

// 创建连接池, 并从c3p0-config.xml文件中的name属性为mysql的named-config元素中读取参数

ComboPooledDataSource pool = new ComboPooledDataSource("mysql");

c. 调用DataSource对象的getConnection()方法获得连接.

?

?

热点排行