Java连接池
2015-08-18 16:46
603 查看
Java连接池是Java学习者必知的一个基础概念。下面给出一个例子,总结了一些学习Java连接池的一些心得。本例子只有三个文件,下面是其源码
resourceBundle.properties文件
ResourceManager.java文件
DbConnectionPool.java类
接下来在说一下,现在主流的开源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
resourceBundle.properties文件
connection.username=sa connection.password=sa connection.url=jdbc:sqlserver://localhost:1433;databaseName=collectionpool connection.driverClass=com.microsoft.jdbc.sqlserver.SQLServerDriver connection.poolSize=20
ResourceManager.java文件
package org.topCSA.connection.db.Resource; import java.util.ResourceBundle; publicclass ResourceManager { privatestatic ResourceBundle r; static{ r = ResourceBundle.getBundle("resourceBundle"); } publicstatic String getDriverClass(){ returnr.getString("connection.driverClass"); } publicstatic String getUrl(){ returnr.getString("connection.url"); } publicstatic String getUsername(){ returnr.getString("connection.username"); } publicstatic String getPassword(){ returnr.getString("connection.password"); } publicstaticintgetPoolSize(){ int poolSize = Integer.valueOf(r.getString("connection.poolSize")); return poolSize; } publicstaticvoid refresh(){ r = ResourceBundle.getBundle("resourceBundle"); } }
DbConnectionPool.java类
package org.topCSA.connection.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import org.topCSA.connection.db.Resource.ResourceManager; publicclass DbConnectionPool { private List<Connection> pool; privateintpoolSize = 1; private Connection conn = null; privatestatic DbConnectionPool instance = null; /** *单粒模式私有构造方法,获得本类的对象,通过getIstance方法。 */ private DbConnectionPool() { pool = new ArrayList<Connection>(); this.createConnection(); } /** *得到当前连接池的一个实例 */ publicstatic DbConnectionPool getInstance() { if (instance == null) { instance = new DbConnectionPool(); } returninstance; } /** *得到连接池中的一个连接 */ publicsynchronized Connection getConnection() { if (pool.size() > 0) { Connection conn = pool.get(0); pool.remove(conn); return conn; } else { returnnull; } } /** *创建初始的数据库连接 */ privatevoid createConnection() { int temp = ResourceManager.getPoolSize(); if(temp > 0){ this.poolSize = temp; } for (int i = 0; i < poolSize; i++) { try { Class.forName(ResourceManager.getDriverClass()); conn = DriverManager.getConnection(ResourceManager.getUrl(),ResourceManager.getUsername(),ResourceManager.getPassword()); pool.add(conn); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } } /** *用完将连接放回到连接池中 * *@paramconn */ publicsynchronizedvoid release(Connection conn) { pool.add(conn); } /** *关闭连接池中的所有连接 */ publicsynchronizedvoid closePool() { for (int i = 0; i < pool.size(); i++) { try { conn = ((Connection) pool.get(i)); conn.close(); pool.remove(i); } catch (SQLException e) { e.printStackTrace(); } } } }
接下来在说一下,现在主流的开源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
相关文章推荐
- select2组件
- Java线程池的几种实现 及 常见问题讲解
- java 之 桥接模式
- java虚拟机类加载机制
- java集合中的fail-fast机制
- Java 其他对象 IO流 字符流--18
- 基于SpringMVC的Restful风格的增删改查--④更新员工信息
- Failed to load JavaHL Library解决方法
- 杭电 HDU 1248 Java寒冰王座
- Eclipse中的svn冲突解决办法
- SpringMVC、Hibernate系列之级联对象的json序列化
- 如何将Eclipse中的开源项目使用到Android Studio中
- Java 内存消耗与堆栈
- 在java代码中设置TextView中DrawableLeft的方法
- java中小数的处理:高精度运算用bigDecimal类,精度保留方法,即舍入方式的指定
- java中小数的处理:高精度运算用bigDecimal类,精度保留方法,即舍入方式的指定
- java知识
- About the struts2 some problem
- JAVA中断迭代的几种方式
- 浅谈Java单例模式