Java连接池

Java连接池是Java学习者必知的一个基础概念。下面给出一个例子,总结了一些学习Java连接池的一些心得。本例子只有三个文件,下面是其源码

resourceBundle.properties文件

 
 
  1. connection.username=sa  
  2. connection.password=sa  
  3. connection.url=jdbc:sqlserver://localhost:1433;databaseName=collectionpool connection.driverClass=com.microsoft.jdbc.sqlserver.SQLServerDriver  
  4. connection.poolSize=20
ResourceManager.java文件
 
 
  1. package org.topCSA.connection.db.Resource;  
  2. import java.util.ResourceBundle;  
  3. publicclass ResourceManager {  
  4.     privatestatic ResourceBundle r;  
  5.     static{  
  6.        r = ResourceBundle.getBundle("resourceBundle");  
  7.     }  
  8.     publicstatic String getDriverClass(){  
  9.        returnr.getString("connection.driverClass");  
  10.     }  
  11.     publicstatic String getUrl(){  
  12.        returnr.getString("connection.url");  
  13.     }  
  14.     publicstatic String getUsername(){  
  15.        returnr.getString("connection.username");  
  16.     }  
  17.     publicstatic String getPassword(){  
  18.        returnr.getString("connection.password");  
  19.     }  
  20.     publicstaticintgetPoolSize(){  
  21.        int poolSize = Integer.valueOf(r.getString("connection.poolSize"));  
  22.        return poolSize;  
  23.     }  
  24.     publicstaticvoid refresh(){  
  25.        r = ResourceBundle.getBundle("resourceBundle");  
  26.     }  

DbConnectionPool.java类

 
 
  1. package org.topCSA.connection.db;  
  2. import java.sql.Connection;  
  3. import java.sql.DriverManager;  
  4. import java.sql.SQLException;  
  5. import java.util.ArrayList;  
  6. import java.util.List;  
  7. import org.topCSA.connection.db.Resource.ResourceManager;  
  8. publicclass DbConnectionPool {  
  9.     private List<Connection> pool;  
  10.     privateintpoolSize = 1;  
  11.     private Connection conn = null;  
  12.     privatestatic DbConnectionPool instance = null;  
  13.     /**  
  14.      *单粒模式私有构造方法,获得本类的对象,通过getIstance方法。  
  15.      */ 
  16.     private DbConnectionPool() {  
  17.        pool = new ArrayList<Connection>();  
  18.        this.createConnection();  
  19.     }  
  20.     /**  
  21.      *得到当前连接池的一个实例  
  22.      */ 
  23.     publicstatic DbConnectionPool getInstance() {  
  24.        if (instance == null) {  
  25.            instance = new DbConnectionPool();  
  26.        }  
  27.        returninstance;  
  28.     }  
  29.     /**  
  30.      *得到连接池中的一个连接  
  31.      */ 
  32.     publicsynchronized Connection getConnection() {  
  33.        if (pool.size() > 0) {  
  34.            Connection conn = pool.get(0);  
  35.            pool.remove(conn);  
  36.            return conn;  
  37.        } else {  
  38.            returnnull;  
  39.        }  
  40.     }  
  41.     /**  
  42.      *创建初始的数据库连接  
  43.      */ 
  44.     privatevoid createConnection() {  
  45.        int temp = ResourceManager.getPoolSize();  
  46.        if(temp > 0){  
  47.            this.poolSize = temp;  
  48.        }  
  49.        for (int i = 0; i < poolSize; i++) {  
  50.            try {  
  51.               Class.forName(ResourceManager.getDriverClass());  
  52.               conn = DriverManager.getConnection(ResourceManager.getUrl(),ResourceManager.getUsername(),ResourceManager.getPassword());  
  53.               pool.add(conn);  
  54.            } catch (ClassNotFoundException e) {  
  55.               e.printStackTrace();  
  56.            } catch (SQLException e) {  
  57.               e.printStackTrace();  
  58.            }  
  59.        }  
  60.     }  
  61.     /**  
  62.      *用完将连接放回到连接池中  
  63.      *  
  64.      *@paramconn  
  65.      */ 
  66.     publicsynchronizedvoid release(Connection conn) {  
  67.        pool.add(conn);  
  68.     }  
  69.     
  70.     /**  
  71.      *关闭连接池中的所有连接  
  72.      */ 
  73.     publicsynchronizedvoid closePool() {  
  74.        for (int i = 0; i < pool.size(); i++) {  
  75.            try {  
  76.               conn = ((Connection) pool.get(i));  
  77.               conn.close();  
  78.               pool.remove(i);  
  79.            } catch (SQLException e) {  
  80.               e.printStackTrace();  
  81.            }  
  82.        }  
  83.     }  

接下来在说一下,现在主流的开源java连接池:

1.C3P0  :是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。参考网站: http://sourceforge.net/projects/c30/

2.Proxool :是一个Java SQL Driver驱动程序,提供了对你选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中。完全可配置。快速,成熟,健壮。可以透明地为你现存的JDBC驱动程序增加连接池功能。  参考网站: http://proxool.sourceforge.net

3.Jakarta DBCP  :是一个依赖Jakarta commons-pool对象池机制的数据库连接池.DBCP可以直接的在应用程序用使用。参考网站: http://jakarta.apache.org/commons/dbcp/

4.ctionBroker  :DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池.DBCP可以直接的在应用程序用使用。参考网站:http://jakarta.apache.org/commons/dbcp/

5.DBPool  :是一个高效的易配置的数据库连接池。它除了支持连接池应有的功能之外,还包括了一个对象池使你能够开发一个满足自已需求的数据库连接池。参考网站:http://homepages.nildram.co.uk/~slink/java/DBPool/

6.XAPool :是一个高效的易配置的数据库连接池。它除了支持连接池应有的功能之外,还包括了一个对象池使你能够开发一个满足自已需求的数据库连接池。参考网站:http://xapool.experlog.com/

7.SmartPool  :SmartPool是一个连接池组件,它模仿应用服务器对象池的特性。SmartPool能够解决一些临界问题如连接泄漏(connection leaks),连接阻塞,打开的JDBC对象如Statements,PreparedStatements等. SmartPool的特性包括支持多个pools,自动关闭相关联的JDBC对象, 在所设定time-outs之后察觉连接泄漏,追踪连接使用情况, 强制启用最近最少用到的连接,把SmartPool"包装"成现存的一个pool等。参考网站:http://smartpool.sourceforge.net/

8.MiniConnectionPoolManager  :MiniConnectionPoolManager是一个轻量级JDBC数据库连接池。它只需要Java1.5(或更高)并且没有依赖第三方包。参考网站:http://www.source-code.biz/snippets/java/8.htm

本文来自xcp的博客:《java 连接池 总结 复习》


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值