当前位置:  技术问答>java相关

有谁写过连接池

    来源: 互联网  发布时间:2017-03-15

    本文导语:  有哪位高手写过连接池?可以在此谈一下心得和技巧吗?最好发布一下代码 :-) | package util.database; import java.sql.*; import java.util.*; /**  * ConnectionManager  * 数据库连接的管理类,使用连接池。默认的最...

有哪位高手写过连接池?可以在此谈一下心得和技巧吗?最好发布一下代码
:-)

|
package util.database;


import java.sql.*;
import java.util.*;

/**
 * ConnectionManager
 * 数据库连接的管理类,使用连接池。默认的最小连接数和最大连接数分别为5,10。
 * 如果用户指定的值大于默认值,就采用指定的值
 *
 * @author Michael Zeng
 * @version 1.0 September 18, 2002
 *
 * @todo: 目前还只能支持一个数据库和一个连接池。因为在构造函数中指定了数据库的
 * 各种参数,不是很灵活。下一步采用loadProperty()方法从一个配置文件中直接读取参
 * 数,并且考虑支持多个连接池。
 */
public class ConnectionManager
{
    private static ConnectionManager instance = null;
    private ConnectionPool connPool = null;
    private String driver, url, user, passwd;
    private int minConn = 5, maxConn = 10;
    private final long PERIOD = 20000;  //线程等待的时间20秒
    private final int TRY_TIMES = 5;    //池中没有可用连接时的重试次数

    /**
     * 得到ConnectionManager的一个唯一实例
     *
     * @param _driver 数据库驱动程序
     * @param _url 数据库的地址
     * @param _user 数据库用户名
     * @param _passwd 用户密码
     * @param _minConn 最小支持的连接数目
     * @param _maxConn 最大支持的连接数目
     * @return ConnectionManager 唯一实例
     *
     * @throws Exception
     */
    public static ConnectionManager getInstance(String _driver, String _url, String _user,
            String _passwd, int _minConn, int _maxConn) throws Exception
    {
        if(instance == null)
        {
            instance = new ConnectionManager(_driver, _url, _user, _passwd,
                    _minConn, _maxConn);
        }
        return instance;
    }

    /**
     * 从连接池中得到Conncetion的一个实例
     *
     * @return Connection 连接的实例,出现异常情况时,返回null
     *
     * @throws Exception
     */
    public Connection getConnection() throws Exception
    {
        return this.connPool.getConnection();
    }

    /**
     * 把一个Connection实例返回连接池,如果已经到了池的最大容量,
     * 就把这个连接释放。
     *
     * @param conn 要返回的Connection
     *
     * @throws Exception
     */
    public void freeConncetion(Connection conn) throws Exception
    {
        this.connPool.freeConncetion(conn);
    }

    /**
     * 释放连接池中的所有Connection
     *
     * @throws Exception
     */
    public void close()throws Exception
    {
        this.connPool.release();
    }

    /**
     * 得到连接池的实际大小
     *
     * @return int 连接池的大小
     */
    public int getPoolSize()
    {
        return this.connPool.getPoolSize();
    }

    /**
     * 私有的构造函数
     *
     * @param _driver 数据库驱动程序
     * @param _url 数据库的地址
     * @param _user 数据库用户名
     * @param _passwd 用户密码
     * @param _minConn 最小支持的连接数目
     * @param _maxConn 最大支持的连接数目
     * @return ConnectionManager 实例
     *
     * @throws Exception
     */
    private ConnectionManager(String _driver, String _url, String _user,
                              String _passwd, int _minConn, int _maxConn) throws Exception
    {
        this.driver = _driver;
        this.url = _url;
        this.user = _user;
        this.passwd = _passwd;
        //如果用户指定的值大于默认值,就采用指定的值
        this.minConn = Math.max(this.minConn, _minConn);
        this.maxConn = Math.max(this.maxConn, _maxConn);
        //如果用户指定的min > max,强迫两个值相等
        this.minConn = Math.min(this.minConn, this.maxConn);

        this.connPool = new ConnectionPool();
    }

    /**
     * ConnectionPool
     * inner class
     */
    private class ConnectionPool implements Runnable
    {
        private List pool = null;
        private Thread runner = null;
        private boolean runOver = false;//是否结束线程的标识

        /**
         * 构造函数,初始化连接池中的Connection
         *
         * @throws Exception
         */
        public ConnectionPool() throws Exception
        {
            this.pool = new LinkedList();
            //初始化最小数量的Connection
            for (int i = 0; i 

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • mysql中如何查看最大连接数(max_connections)和修改最大连接数
  • 什么是socket的长连接,以及如何实现长连接,长连接和短连接有什么区别?
  • 如何在windows上远程连接centOS桌面
  • 建立长连接的SOCET通讯后,如何检查长连接的有效性,如何获知连接状态
  • Myeclipse中自带Tomcat的JDBC连接池配置(mysql和mssql)
  • Oracle 表连接方式(内连接/外连接/自连接) 详解
  • php中内置的mysql数据库连接驱动mysqlnd简介及mysqlnd的配置安装方式
  • 关于inetd。我做了一个测试程序,想计算ftp最多能有多少了连接,我发现当连接到1020次就不可以连接了,哪位大侠知道如何做才能将连接数量增加至10000呢??
  • php中操作memcache的类及成员列表及php下如何连接memched服务器
  • 哪位给解释一下长连接和短连接的区别?
  • mysql jdbc连接mysql数据库步骤及常见参数详解
  • ssh连接得通虚拟机,连接不通隔壁宿舍?
  • windows server2012无法连接无线网络解决方法(windows无线连接)
  • 请问unix/linux下动态连接库和静态连接库有什么区别?
  • fedora15 KDE桌面下能连接WLAN,GNOME下能搜到信号,就是连接不上,。。。。
  • linux 有线连接了却显示有线连接断开是怎么回事
  • 建立一个ftp数据连接并传送或接受完毕一些数据后,能否不关闭此数据连接,下次接着用?
  • oracle远程连接服务器出现 ORA-12170 TNS:连接超时 解决办法
  • LINUX中连接C++的库怎么连接.库在什么位置,还有什么特殊命令吗?
  • socket 断开连接如何再恢复连接
  • 请问连接本机数据库的JDBC,和连接远程的JDBC有没有区别?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3