`
yzhong_sa
  • 浏览: 89962 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类

1.盈正面试准备--数据库连接池 自己实现的耶。。

阅读更多
[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();

}
}
}
分享到:
评论

相关推荐

    代理模式之静态代理---数据库连接池对象实现原理

    在本主题“代理模式之静态代理---数据库连接池对象实现原理”中,我们将探讨如何使用静态代理来实现数据库连接池。数据库连接池是现代应用中常用的优化手段,它可以高效地管理数据库连接,避免频繁地创建和关闭连接...

    dbcp连接池所需jar(commons-collections-3.1.jar,commons-dbcp-1.2.jar,commons-pool-1.6.)

    2. `commons-dbcp-1.2.jar`:这是DBCP的主要实现库,包含了数据库连接池的具体实现。它提供了一个数据源接口,允许应用程序通过获取和归还连接到池中来管理数据库连接。这个库还包含了一些实用工具类,用于初始化和...

    commons-dbcp-1.2.1.jar + commons-pool-1.4.jar + commons-collections-3.2.jar

    在Java开发中,数据库连接管理是一项关键任务,而Apache Commons DBCP(Database Connection Pool)是广泛使用的数据库连接池实现之一。本主题将详细解析标题和描述中提及的三个核心库:`commons-dbcp-1.2.1.jar`、`...

    commons-dbcp-1.4.jar和commons-pool-1.5.6.jar

    Apache Commons DBCP是Apache Commons项目的一部分,它提供了一个基于Apache Commons Pool的数据库连接池实现。数据库连接池是一种管理数据库连接的技术,通过复用已建立的数据库连接,减少创建和销毁连接的开销,...

    单例模式----数据库连接池管理类的应用

    在Java中,实现数据库连接池的工具有很多,如Apache的DBCP、C3P0,还有更现代的HikariCP等。这些工具通常都遵循单例模式来设计,确保在整个应用生命周期中只有一个连接池实例存在,这样可以保证所有组件共享同一个...

    thinkphp5-swoole 数据库连接池实现

    基于tp5的swoole支持,对th5的connection进行改造,使用Swoole\Coroutine\MySQL重写了基于swoole的PDO接口,实现了mysql的数据库连接池,本地测试可用。使用时,替换thinkphp/library/think/db/Connection.php,并...

    03-数据库连接池驱动_数据库连接池;驱动_

    其次,Druid是阿里巴巴开源的数据库连接池实现,它不仅是一个连接池,还集成了监控、SQL解析、WebStatFilter等特性。Druid以其强大的监控能力、优秀的性能和全面的功能深受开发者喜爱。它提供了实时的监控界面,可以...

    c# mysql数据库连接池实现

    在.NET Core 2.1框架下,可以使用.NET Standard库来实现高效、优化的数据库连接管理,特别是通过连接池来提高性能。本文将深入探讨如何在C#中使用MySQL数据库连接池。 首先,我们需要了解什么是数据库连接池。...

    C#高效数据库连接池源码

    1. **数据库连接池原理**: 数据库连接池是一种对象池设计模式的应用,它维护了一组已打开的数据库连接,而不是每次需要时都创建新的连接。应用程序在需要时从池中获取连接,使用完毕后归还,而不是关闭。这样减少...

    spring.jar, commons-collections.jar, commons-dbcp.jar, commons-pool.jar

    在上述的DBCP中, Commons Pool被用来管理数据库连接的生命周期,实现数据库连接的池化,使得多个请求可以共享相同的连接,从而提高了性能和减少了资源消耗。 5. **datastore**: 这可能是指数据存储或者数据存储的...

    Java 开发--JSP数据库连接池的研究与实现(源代码+论文).rar

    在JSP中实现数据库连接池,通常会用到Apache的DBCP或C3P0,以及更现代的HikariCP等第三方库。这些连接池组件提供了一套API,允许开发者在Web应用初始化时配置连接池,然后在JSP页面中通过获取和释放连接的方式来使用...

    c3p0-0.9.5.2.jar+mchange-commons-java-0.2.12.jar

    1. **连接池管理**:c3p0能自动创建、管理、维护数据库连接,避免了频繁创建和关闭连接的开销。 2. **连接测试**:c3p0提供了一种机制,可以在连接分配给应用程序之前进行健康检查,确保返回的连接是可用的。 3. *...

    commons-pool-1.3.jar 和commons-dbcp-1.2.2.jar

    标题中的"commons-pool-1.3.jar"和"commons-dbcp-1.2.2.jar"是两个在Java开发中常用的开源库,主要用于数据库连接池管理。它们都是Apache Commons项目的一部分,旨在提高数据库访问效率,减少数据库资源的消耗。 ...

    Java各数据库连接池配置介绍

    Java数据库连接池是管理数据库连接的一种机制,它可以有效地复用数据库连接,避免每次数据库操作时创建和销毁连接的开销,从而提高了应用的性能。在Java中,有多种数据库连接池实现,包括C3P0、DBCP和Proxool等。 *...

    基于java的开发源码-数据库连接池 C3P0.src.zip

    基于java的开发源码-数据库连接池 C3P0.src.zip 基于java的开发源码-数据库连接池 C3P0.src.zip 基于java的开发源码-数据库连接池 C3P0.src.zip 基于java的开发源码-数据库连接池 C3P0.src.zip 基于java的开发源码-...

    【第一讲连接数据库】-01E-数据库连接池.rar

    1. **连接初始化**:在系统启动时,连接池会预先创建一定数量的数据库连接并保存在池中。这些连接在系统运行期间处于空闲状态,等待被应用使用。 2. **连接分配**:当应用程序需要访问数据库时,不再直接创建新的...

    commons-collections-3.2.jar+commons-dbcp-1.2.1.jar+commons-pool-1.3.jar

    这些文件是Apache Commons项目中的三个重要组件:Commons Collections、Commons DBCP(数据库连接池)和Commons Pool。Apache Commons是Java编程语言中一个非常重要的库集合,提供了大量实用工具类和算法,帮助...

    [] - 2022-08-03 HikariCP数据库连接池,太快了!.pdf

    互联网资讯,技术简介,IT、AI技术,人工智能

    commons-collections-3.1.jar;commons-dbcp-1.2.1.jar;commons-pool-1.2.jar

    数据库连接池在多用户环境下可以有效地管理数据库连接,避免了频繁地创建和销毁连接导致的性能损耗。DBCP通过维护一个数据库连接池,允许多个请求共享有限数量的数据库连接,从而提高应用的效率和响应速度。它依赖于...

    TP利用Swoole实现数据库连接池

    ThinkPhp利用swoole创建数据库连接池,优化数据读取,减少请求消耗!

Global site tag (gtag.js) - Google Analytics