文档章节

Java连接池总结复习及推荐

杭州_周陶忠
 杭州_周陶忠
发布于 2013/09/10 21:17
字数 911
阅读 70
收藏 0



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. }
  27. }

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. publicsynchronizedvoid closePool() {
  73. for (int i = 0; i < pool.size(); i++) {
  74. try {
  75. conn = ((Connection) pool.get(i));
  76. conn.close();
  77. pool.remove(i);
  78. } catch (SQLException e) {
  79. e.printStackTrace();
  80. }
  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



本文转载自:

上一篇: Hibernate缓存配置
下一篇: md5密码加盐
杭州_周陶忠
粉丝 9
博文 32
码字总数 66340
作品 0
杭州
高级程序员
私信 提问
十个JDBC的最佳实践

JDBC是Java为多种关系型数据库提供的统一的访问接口,以下是我长期使用JDBC总结的十个最佳实践。 JDBC最佳实践1:使用PrearedStatement 任何一个使用过JDBC的Java程序员几乎都知道这个,Pre...

王振威
2012/09/08
6.3K
12
十个JDBC的最佳实践

JDBC是Java为多种关系型数据库提供的统一的访问接口,以下是我长期使用JDBC总结的十个最佳实践。 JDBC最佳实践1:使用PrearedStatement 任何一个使用过JDBC的Java程序员几乎都知道这个,Pre...

王振威
2012/11/26
1K
4
Go commons pool 1.0 发布,通用 Go 语言对象池

Go commons pool是一个通用的go语言对象池,基于Java版本的Apache Commons Pool改写。Go commons pool实现了Java版本的主要功能,改写了大多数Java版本的测试用例,测试覆盖率达到90%,性能测...

jolestar
2016/01/18
2.2K
11
6个offer,10家公司,25场面试,从美团到头条,我的求职之路!

简介:文章的笔者是三四月时跳槽换工作,对面试经验做一些总结,今后也是总结自己工作中遇到的一些问题分享给大家,算是一个开始吧! 跳槽经历分为定位、准备、简历、面试这四个部分,本篇文...

java知识分子
05/24
0
0
JDBC连接池实现

最近搭建了一个CS服务端框架,用Java实现的;考虑底层数据库服务的性能和效率,上级要求使用性能好点的JDBC连接池来做;以前使用过类似持久化框架(比如:Spring+hibernate)配置下连接池就可,...

2011pengchuang
2011/04/07
903
1

没有更多内容

加载失败,请刷新页面

加载更多

弹性盒模型常见例子

这篇文章主要是分享了三个例子( 垂直居中、响应式、圣杯 ),介绍了Flexbox的主要应用场景,并与传统方式对比, 感受Flexbox布局带来的便捷开发体验。 1 垂直居中对齐 不使用Flexbox <style>...

凌兮洛
16分钟前
0
0
Redis分布式锁服务

概述 在多线程环境下,通常会使用锁来保证有且只有一个线程来操作共享资源。比如: object obj = new object();lock (obj) { //操作共享资源 } 利用操作系统提供的锁机制,可以确保多线...

中关村的老男孩
20分钟前
1
0
idea+mybatis

报错信息如下 Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession.### The error may exist in com/bdqn/dao/UserDaoMappe......

冥焱
20分钟前
2
0
Android之用sharedUserId来实现不同应用(APK)数据共享

android:sharedUserId 当APK安装的时候,userid这个标志就会产生。APK在设备上的整个生命周期中,这个ID不再改变。不同设备上同一个应用包可能有不同的userid,重要的是在给定的设备上,每个...

天王盖地虎626
22分钟前
1
0
如何给龙芯电脑录屏

vokoscreen

gugudu
30分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部