开始想使用c3p0最为底层的连接池,但想想还是算了。只是一个练习的小项目,还是手写一个简单点的吧。也给项目减少点体积,尽管那也大不了多少。
连接池嘛基本的也就是两个功能,取得连接、关闭连接。
下面贴出源码
public class DataSourceUtil {
private static SimplePool connUtil;
public static void init(String url,String user,String password){
connUtil = new SimplePool(url,user,password);
}
public static Connection getConnection(){
return connUtil.getConnection();
}
public static void close(Connection conn){
connUtil.closeConnection(conn);
}
public static void closePool(){
connUtil.shutDown();
}
//构造一个简易的连接池
private static class SimplePool{
String url,user,password;
public SimplePool(String url,String user,String password){
this.url = url;
this.user = user;
this.password = password;
fillQueue();
}
private Queue<Connection> queue = new ArrayDeque<Connection>();
//关闭此连接池,把剩余所有连接进行关闭
void shutDown(){
Connection conn= queue.poll();
while(conn!=null){
try {
conn.close();
} catch (SQLException e) {
LogUtil.waring(SimplePool.class.getName(), "关闭与数据库的连接失败!");
}
conn=queue.poll();
}
}
//将使用完成的Connection重新放回到队列
synchronized void closeConnection(Connection conn){
boolean b = false;
try {
b=conn.getAutoCommit();
if(!b){
conn.commit();
}
conn.setAutoCommit(true);
} catch (SQLException e) {
LogUtil.waring(SimplePool.class.getName(), "将连接重新放回连接池失败!");
fillQueue();
return;
}
queue.offer(conn);
}
//使用得到的连接信息,构造Connection对象并填充到queue。
void fillQueue(){
//构造10个Connection对象并进行填充
while(queue.size()<10){
Connection conn=null;
try {
conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
LogUtil.error(SimplePool.class.getName(), "无法取得数据库连接,连接信息url:"+url+",user:"+user+",password:"+password);
return;
}
queue.add(conn);
}
}
//取得Connection队列的第一个,并移除。没有则返回null
synchronized Connection getConnection(){
Connection conn = queue.poll();
if(conn==null) LogUtil.waring(SimplePool.class.getName(), "无法从一个空的连接池里面取得连接!");
return conn;
}
}
}
为了调用方便就把几个方法定义成了static类型的
内部类SimplePool是主要实现的连接池功能,为了能供静态方法调用,所以也定义成了static
思路是
利用一个队列作为数据库连接的容器,当项目被加载的时候进行初始化(由BlogFilter调用),初始10个连接放入队列。
当有用户请求连接的时候则取得队列头部的连接返回,poll在返回连接的时候同时会把此对象此队列移出。
当关闭连接的时候则重新放回队列。
只是很简单的连接池实现,但是供练习用足够了。
分享到:
相关推荐
简易连接池snappool.jar
自定义实现的数据库连接池,并进行加锁,保证线程安全,适合初学者学习。
数据库连接池的简易Java实现
在db.cnf中我们需要对将要连接的 mysql数据库 和 ThemisPool连接池 做一些基本配置。 In db.cnf we need to do some basic configuration of the mysql database and ThemisPool connection pool to be connected.
用java实现的简易的数据库连接池及其管理 课程设计 编写一关于Microsoft Access数据库连接池及其管理的相关类,要求能从XML配置文件中读取该数据库驱动程序,数据库名,连接池最大连接数,最多等待用户数,查询...
主要为大家介绍了Java实现数据库连接池简易教程,感兴趣的小伙伴们可以参考一下
j2ee连接池用法,用简单的几步教会你j2ee连接池用法,非常好用偶!
这是一个很简易并且很干净的tomcat连接池示例,在该示例中有详细的说明,最为重要的是它只突出表现tomcat和链接池的技术,剥离了其他繁琐的技术,所以很适合对初学连接池的读者,和像我一样当年花了好长时间配了好久...
简易自带连接池的mysql操作工具,仅供学习。
纯手写简易版的数据库连接池jar包
下面小编就为大家分享一篇自定义一个简单的JDBC连接池实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
使用开源工具mysqlreport监控Mysql数据库-简易使用方法分享.pdf
适合刚学完SSM的练手项目
java proxool 轻量级数据库连接池配置文件,可进行简易的数据库连接操作
1、本订销系统程序默认使用数据为连接池使用的apache commons-dbcp-1.2.1管理数据库连接(tomcat自带),确保该包可用.若要使用其它数据库连接沲,需要修改easyjf-dbo.xml文件中的相应配置。 2、若不能正常访问数据库,...
用连接池实现的一个简易论坛
简易配置连接池的参数等
这是自己大二写的代码,现在提交大家。 数据库用的是sql2000,jdbc.odbc连接池连接 数据库我在代码中已经给出,可以自己下载并修改 因为这是我自己写的,所以很适合初学jsp者下载学习
jedis连接池 配置文件等等 ,jedis操作工具类 各种操作直接调用即可。拿不到连接请设置一下redis密码
1、JDK1.4.2以上版本(注意配置java_home路径) ...1、本订销系统程序默认使用数据为连接池使用的apache commons-dbcp-1.2.1管理数据库连接(tomcat自带),确保该包可用.若要使用其它数据库连接沲,需要修改eas