连接池源代码请参看前一篇博文
连接池管理类中的属性:
private int clients; //
private Vector drivers = new Vector();
private PrintWriter log;
private Hashtable pools = new Hashtable();
内部类DBConnectionPool的属性:
private int checkedOut; // 当前连接数
private Vector freeConnections = new Vector(); // 保存所有可用连接
private int maxConn; // 此连接池允许建立的最大连接数
private String name; // 连接池名字
private String password; // 密码或null
private String URL; // 数据库的JDBC URL
private String user; // 数据库账号或null
新建数据库连接池管理类:
调用static synchronized public DBConnectionManager getInstance()获取管理类的实例, 有就直接返回,没有创建一个。保证只有一个实例,通过client记录共有几个用户
没有创建管理类时调用private DBConnectionManager(),它调用Init()读取配置文件,调用loadDrivers(dbProps)注册和记录驱动程序。调用createPools(dbProps);循环获取url和用户名密码,并新建DBConnectionPool加入到pools中,这里可以在配置文件中多配置几个连接池,这里就会创建几个连接池,连接池的创建只在新建连接池管理类(即第一次获取管理类)的时候由调用init创建
获取连接:
通过管理类实例调用Connection getConnection(String name, long time) 获取名为name连接池pool,并调用连接池pool的getConnection(String name, long time) 方法获取数据库连接。time变量可选,为时间限制,当没有time变量时,getConnection会取freeConnections中的空闲连接,若没有且没有到达最大的连接数,就会创建一个新连接返回,否则返回null。当有time时会调用上面的getConnection(String name)方法,若返回null,则当前线程会wait(time)时间,在这期间等待freeConnection(Connection con) 释放一个连接后将其唤醒。若超过time时间,则返回null。
释放连接:
通过管理类实例调用freeConnection(String name, Connection con)获取名为name连接池pool,并调用连接池pool的freeConnection(Connection con), freeConnections.addElement(con);将con连接放进空闲连接链中,并checkedOut--;notifyAll();唤醒等待队列中的线程。
释放连接池管理类:
通过管理类实例调用 public synchronized void release() ,判断--clients是否为空,若不为空直接return,否则循环获取所有pool,并调用pool的 release() 方法循环释放调pool中的所有连接(con.close();),释放完所有pool后再循环调用DriverManager.deregisterDriver(driver); 释放掉所有注册driver。
<!--EndFragment-->
分享到:
相关推荐
这篇“DBCP 数据库连接池JNDI连接 学习笔记”主要探讨了如何结合JNDI(Java Naming and Directory Interface)来使用DBCP进行数据库连接管理。JNDI提供了一种标准的方式来查找和绑定资源,如数据源,在企业级应用中...
这篇“连接池学习笔记”涵盖了关于连接池的基本概念、工作原理以及常见的数据库连接池实现,旨在帮助读者深入理解这一工具。以下是对该主题的详细阐述: 一、连接池的概念 连接池是一种对象池设计模式的具体应用,...
** BoneCP 连接池学习笔记 ** BoneCP 是一个高效、轻量级的 Java 数据库连接池(JDBC Connection Pool)实现。它在性能上优于其他同类连接池,如 C3P0 和 DBCP,尤其适用于高并发场景。在深入理解 BoneCP 之前,...
数据连接池,如Apache的DBUtils,提高了数据库连接的效率和管理,通过池化资源避免频繁创建和关闭连接。 Service层的事物处理通常指的是在业务逻辑层中对数据库操作进行事务管理。例如,如果一个业务操作涉及多个...
连接池预先初始化一定数量的数据库连接,当需要时可以从池中获取,使用完毕后归还,避免了频繁创建和关闭连接的开销。 5. **SQL查询**: 登录验证通常涉及到SQL的SELECT语句,例如`SELECT * FROM users WHERE ...
7. **连接池**:在实际应用中,为了优化性能和资源利用,通常会使用连接池(如C3P0、HikariCP、Apache DBCP等),它预先创建并管理一组数据库连接,避免频繁创建和关闭连接。 8. **JDBC与JSP结合**:在JSP(Java...
在服务器启动时,JNDI会自动创建一个连接池,这是一个预分配的数据库连接集合,可以高效地管理数据库连接,避免了频繁创建和关闭连接的开销,提高了应用性能。 数据源(DataSource)接口是JDBC2.0中的一个重要概念...
DBCP是Apache的一个开源项目,提供了数据库连接池的实现。 三、配置步骤 1. 添加依赖:首先,你需要在你的项目的类路径下添加DBCP的JAR文件,如`commons-dbcp.jar`和`commons-pool.jar`。 2. 配置数据源:在Tomcat...
【Java数据库连接与查询】 Java数据库连接(JDBC)是Java程序访问数据库的标准接口,它允许Java应用程序...在实际应用中,还可以进一步学习连接池(如C3P0、HikariCP)来管理数据库连接,提高应用程序的性能和稳定性。
在提供的"jsp笔记"文件中,可能包含了对这些问题的详细记录和解决方案,包括JSP语法的使用示例、Struts框架的应用实例、如何配置和优化数据库连接池以解决连接问题,以及处理乱码问题的具体步骤。此外,笔记可能还会...
“很好的Jabc学习笔记”这个资料主要涵盖了JDBC的基础知识,包括如何连接数据库、使用连接池以及基本的异常处理。对于初学者来说,这是了解和掌握Java与数据库交互的一个良好起点。通过深入学习和实践,你可以更好地...
Druid,全称是Database Resource and Utility Design Framework,是由阿里巴巴开源的一款高性能、功能强大的数据库连接池组件。在Java Web开发中,Druid作为数据库连接池管理工具,被广泛应用于各种复杂环境,以提升...
6. **连接池**:在生产环境中,推荐使用连接池来管理数据库连接,如Apache DBCP、C3P0或HikariCP等,以提高性能和资源利用率。 7. **SQL语句执行**:连接建立后,可以使用`Statement`或`PreparedStatement`对象来...
通过学习这个案例,你可以深入理解ADO.NET中的数据库连接、查询和事务处理等核心概念。这将有助于提升你在C#编程中处理数据库的能力。在实践中,还应注意异常处理、连接池的使用以及优化数据库性能等方面,以确保...
【JAVA WEB学习笔记】——Tomcat中数据源的配置与使用 在Java Web开发中,数据源(DataSource)是管理数据库连接的关键组件。它提供了一种高效、灵活的方式来获取和管理数据库连接,尤其是在大型企业级应用中。...
这份"MySQL数据库入门到高级笔记快速学习pdf版本"提供了从基础到高级的全面教程,适合不同水平的学习者。以下将详细解析其中涉及的主要知识点: 1. **基本操作**: - **启动与关闭MySQL服务**:可以通过`...
通过这个学习笔记,学习者可以系统地学习JDBC,理解其原理,熟练掌握数据库操作,并了解如何在实际项目中有效利用Druid这样的高级数据库连接池。此外,结合自己的代码实践,能够进一步提升数据库操作的技能,为将来...
JDBC学习笔记 JDBC(Java DataBase Connectivity)是一种Java程序语言访问数据库的标准接口。它使得Java程序可以连接到各种不同的数据库管理系统,例如Oracle、SQL Server、MySQL、DB2、Sybase等。 JDBC的概念 ...
### 传智播客JDBC学习笔记精要 #### JDBC简述与连接 ...综上所述,传智播客的JDBC学习笔记涵盖了从基础的数据库连接到高级的事务管理、连接池优化等多个层面的内容,是Java开发者学习和掌握JDBC技术的重要参考资料。
在数据库编程方面,笔记介绍了JDBC的基本概念和使用方法,强调了在使用JDBC编程时需要注意的细节,例如Properties属性配置对象的使用,以及数据库连接池的配置和管理,这些都是提升应用程序性能和响应速度的关键技术...