[align=left][/align]首先把连接数据库的底层操作叼出来:
package com.sun.mydbpool;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class Connector {
private static String driver;
private static String url;
private static String username;
private static String password;
private static Properties props;
public Connector(Properties props){
this.props = props;
try{
driver = props.getProperty("driver");
url = props.getProperty("url");
username = props.getProperty("username");
password = props.getProperty("password");
Class.forName(driver);
}catch(Exception e){
e.printStackTrace();
}
}
public Connection getConnection() throws SQLException{
return DriverManager.getConnection(url,username,password);
}
}
然后再开发那个线程管理类:
(1)这个类的维护他自己的一个对象,用单例模式控制。
(2)然后建一个内部类,这是连接池的实现。
这个内部类维护一个集合,这个集合用于装载所有可用的连接对象,然后设计几个同步的方法进行管理 思路是 这个类初始化的时候就往这个集合添加一个初始容量的谅解对象,这样当程序要用的时候可以马上提供,不宜添加太多 导致程序启动的时候比较慢 尤其在游戏的底层编程当中。
下面是实现代码:有待测试 呵呵。不过思路还是没问题的。
package com.sun.mydbpool;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Date;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Properties;
import java.util.Vector;
public class PoolManager {
private static PoolManager instance;
private Properties props;
private static Hashtable<String, DBConnectionPool> pools = new Hashtable<String, DBConnectionPool>();
private PoolManager(){
}
public static PoolManager getInstance(){
if(instance == null){
instance = new PoolManager();
}
return instance;
}
class DBConnectionPool{
private Properties props;
private int maxConn;
private int initSize;
private int checkout = 0;
private Vector<Connection> freeConnections = new Vector<Connection>();
//在构造器中初始化一个初始连接池,容量可配置。
public DBConnectionPool(int maxConn,int initSize,Properties props){
this.props = props;
this.maxConn = maxConn;
this.initSize = initSize;
if(initSize < maxConn){
for(int i = 0;i<initSize;i++){
try {
freeConnections.add(newConnection(this.props));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//当连接对象用完了 不再需要的时候将它返回到这个空闲连接集合当中
public synchronized void freeConnection(Connection conn){
freeConnections.add(conn);
checkout --;
notifyAll();
}
public synchronized Connection getConnection() throws SQLException{
//1.检测freeConnection里面是否有空余连接,有则返回,没有再检测已经checkou的数目是否超出最大值限制
Connection con= null;
if(freeConnections.size() > 0 ){
con = (Connection) freeConnections.elementAt(0);
freeConnections.remove(0);
//检测取得的连接对象是否为空,空不可用
if(con.isClosed()){
//自调用 再取一次
getConnection();
}
return con;
}else{
if(checkout < maxConn ){
con = newConnection(this.props);
}
}
return con;
}
public synchronized Connection getConnection(long waitTime) throws SQLException{
long startTime = new Date().getTime();
Connection conn = null;
while((conn = getConnection()) == null){
try {
wait(waitTime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long endTime = new Date().getTime();
if((endTime - startTime)>waitTime){
return null;
}
}
return conn;
}
public synchronized void realeasePool(){
Enumeration allConnections = freeConnections.elements();
while(allConnections.hasMoreElements()){
Connection conn = (Connection)(allConnections.nextElement());
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
freeConnections.removeAllElements();
}
private synchronized Connection newConnection(Properties props) throws SQLException{
return new Connector(props).getConnection();
}
}
}
分享到:
相关推荐
在本主题“代理模式之静态代理---数据库连接池对象实现原理”中,我们将探讨如何使用静态代理来实现数据库连接池。数据库连接池是现代应用中常用的优化手段,它可以高效地管理数据库连接,避免频繁地创建和关闭连接...
2. `commons-dbcp-1.2.jar`:这是DBCP的主要实现库,包含了数据库连接池的具体实现。它提供了一个数据源接口,允许应用程序通过获取和归还连接到池中来管理数据库连接。这个库还包含了一些实用工具类,用于初始化和...
在Java开发中,数据库连接管理是一项关键任务,而Apache Commons DBCP(Database Connection Pool)是广泛使用的数据库连接池实现之一。本主题将详细解析标题和描述中提及的三个核心库:`commons-dbcp-1.2.1.jar`、`...
Apache Commons DBCP是Apache Commons项目的一部分,它提供了一个基于Apache Commons Pool的数据库连接池实现。数据库连接池是一种管理数据库连接的技术,通过复用已建立的数据库连接,减少创建和销毁连接的开销,...
在Java中,实现数据库连接池的工具有很多,如Apache的DBCP、C3P0,还有更现代的HikariCP等。这些工具通常都遵循单例模式来设计,确保在整个应用生命周期中只有一个连接池实例存在,这样可以保证所有组件共享同一个...
基于tp5的swoole支持,对th5的connection进行改造,使用Swoole\Coroutine\MySQL重写了基于swoole的PDO接口,实现了mysql的数据库连接池,本地测试可用。使用时,替换thinkphp/library/think/db/Connection.php,并...
其次,Druid是阿里巴巴开源的数据库连接池实现,它不仅是一个连接池,还集成了监控、SQL解析、WebStatFilter等特性。Druid以其强大的监控能力、优秀的性能和全面的功能深受开发者喜爱。它提供了实时的监控界面,可以...
在.NET Core 2.1框架下,可以使用.NET Standard库来实现高效、优化的数据库连接管理,特别是通过连接池来提高性能。本文将深入探讨如何在C#中使用MySQL数据库连接池。 首先,我们需要了解什么是数据库连接池。...
1. **数据库连接池原理**: 数据库连接池是一种对象池设计模式的应用,它维护了一组已打开的数据库连接,而不是每次需要时都创建新的连接。应用程序在需要时从池中获取连接,使用完毕后归还,而不是关闭。这样减少...
在上述的DBCP中, Commons Pool被用来管理数据库连接的生命周期,实现数据库连接的池化,使得多个请求可以共享相同的连接,从而提高了性能和减少了资源消耗。 5. **datastore**: 这可能是指数据存储或者数据存储的...
在JSP中实现数据库连接池,通常会用到Apache的DBCP或C3P0,以及更现代的HikariCP等第三方库。这些连接池组件提供了一套API,允许开发者在Web应用初始化时配置连接池,然后在JSP页面中通过获取和释放连接的方式来使用...
1. **连接池管理**:c3p0能自动创建、管理、维护数据库连接,避免了频繁创建和关闭连接的开销。 2. **连接测试**:c3p0提供了一种机制,可以在连接分配给应用程序之前进行健康检查,确保返回的连接是可用的。 3. *...
标题中的"commons-pool-1.3.jar"和"commons-dbcp-1.2.2.jar"是两个在Java开发中常用的开源库,主要用于数据库连接池管理。它们都是Apache Commons项目的一部分,旨在提高数据库访问效率,减少数据库资源的消耗。 ...
Java数据库连接池是管理数据库连接的一种机制,它可以有效地复用数据库连接,避免每次数据库操作时创建和销毁连接的开销,从而提高了应用的性能。在Java中,有多种数据库连接池实现,包括C3P0、DBCP和Proxool等。 *...
基于java的开发源码-数据库连接池 C3P0.src.zip 基于java的开发源码-数据库连接池 C3P0.src.zip 基于java的开发源码-数据库连接池 C3P0.src.zip 基于java的开发源码-数据库连接池 C3P0.src.zip 基于java的开发源码-...
1. **连接初始化**:在系统启动时,连接池会预先创建一定数量的数据库连接并保存在池中。这些连接在系统运行期间处于空闲状态,等待被应用使用。 2. **连接分配**:当应用程序需要访问数据库时,不再直接创建新的...
这些文件是Apache Commons项目中的三个重要组件:Commons Collections、Commons DBCP(数据库连接池)和Commons Pool。Apache Commons是Java编程语言中一个非常重要的库集合,提供了大量实用工具类和算法,帮助...
互联网资讯,技术简介,IT、AI技术,人工智能
数据库连接池在多用户环境下可以有效地管理数据库连接,避免了频繁地创建和销毁连接导致的性能损耗。DBCP通过维护一个数据库连接池,允许多个请求共享有限数量的数据库连接,从而提高应用的效率和响应速度。它依赖于...
ThinkPhp利用swoole创建数据库连接池,优化数据读取,减少请求消耗!