📄 pool.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 + -