⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pool.java

📁 tbuy1.1.5是在netbeans环境下用JSF技术编写的一个论坛tbuy1.1.5是在netbeans环境下用JSF技术编写的一个论坛
💻 JAVA
字号:
/* * 作者: 胡李青 * qq: 31703299 * Copyright (c) 2007 huliqing * 主页 http://www.tbuy.biz/ * 你可以免费使用该软件,未经许可请勿作用于任何商业目的 */package biz.tbuy.common.pool;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;/** * @version 1.0 * @author huliqing * <p><b>qq:</b>31703299 * <p><b>E-mail:</b><a href="mailto:huliqing.cn@gmail.com">huliqing.cn@gmail.com</a> * <p><b>Homepage:</b><a href="http://www.tbuy.biz/">http://www.tbuy.biz/</a> */public class Pool {    private List<ProxyConn> _conns;        private String _driver;    private String _url;    private String _user;    private String _password;        private List<String> _errors;    // 创建连接池过程中出现的错误        /**     * @param driver     * @param url     * @param user     * @param password     */    public Pool(String driver, String url, String user, String password) {        _driver = driver;        _url = url;        _user = user;        _password = password;        _conns = new ArrayList<ProxyConn>(PoolManager.getInstance().getMin());        checkAndCreate();    }        /**     * @return ArrayList<ProxyConn>     */    public List<ProxyConn> getConns() {        return _conns;    }        /**     * 获取连接池创建过程中遇到的错误     */    public List<String> getErrors() {        return _errors;    }        /** method ****************************************************************/    /**     * 从数据库连接池中取得一个空闲连接     * @return proxyConn      */    public synchronized ProxyConn getConnection() {        ProxyConn proxyConn = null;        if (_conns == null || _conns.isEmpty()){            checkAndCreate();        }        for (ProxyConn pConn : _conns) {            if (pConn != null && !pConn.isClosed()) {                if (!pConn.isBusy()) {                    pConn.setBusy(true);                    proxyConn = pConn;                    break;                }            } else {                _conns.remove(pConn);            }        }        if (proxyConn == null) {            // 如果连接已经满,但未达到最大允许连接数,则创建新连接            if (_conns.size() < PoolManager.getInstance().getMax()) {                try {                   proxyConn = new ProxyConn(createConn());                   _conns.add(proxyConn);                } catch (Exception e) {}              } else {// 如果请求达到最大值,则稍后重试                try {                    Thread.sleep(1000);                } catch (InterruptedException ie) {}                if (!_conns.isEmpty()) {                    proxyConn = getConnection();                }            }        }        return proxyConn;    }        /**     * 彻底关闭数据库连接     */    public synchronized void close() {        int n = 1;        for (ProxyConn proxyConn : _conns) {            try {                proxyConn.realClose();            } catch (Exception e) {                System.out.println("the connection close by Error::" + n);                n++;            }        }    }        /**     * 显示该连接池的当前状态     */    public synchronized void state() {        System.out.println("All Connection:" + _conns.size());        int n = 1;        for (ProxyConn proxyConn : _conns) {            if (proxyConn == null) {                System.out.println("NO." + n + ":null");            } else {                if (proxyConn.isBusy()) {                    System.out.println("NO." + n + ":busy:" + proxyConn.getStateTime()/1000);                } else {                    System.out.println("NO." + n + ":free:" + proxyConn.getStateTime()/1000);                }            }            n++;        }    }        /**     * 检查与创建连接,直到连接数达到连接池的最少限制数     */    public synchronized void checkAndCreate() {        while (_conns.size() < PoolManager.getInstance().getMin()) {            try {                _conns.add(new ProxyConn(createConn()));            } catch (Exception e) {                return;            }        }    }        /**     * 创建一个新的数据链接至连接池中。     */    public synchronized Connection createConn()             throws ClassNotFoundException, SQLException {        Connection conn = null;         Class.forName(_driver);        conn = DriverManager.getConnection(_url, _user, _password);        // System.out.println("创建新连接.........................");        return conn;    }        /**     * 释放指定的代理连接,并不真正关闭该连接     */    private void release(ProxyConn conn) {        conn.close();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -