📄 connectionpoolmanager.java
字号:
package com.everstar.database;
import java.io.*;
import java.sql.*;
import java.util.*;
public class ConnectionPoolManager
{
final private static String m_propsName = "/props/db.properties";
final private static String KEY_URL = "url";
final private static String KEY_DRIVER = "driver";
final private static String KEY_USER = "username";
final private static String KEY_PASSWD = "password";
final private static String KEY_MAXCONN = "maxconn";
// The only instance
private static ConnectionPoolManager m_instance;
// The numbers of client that use the instance
private static int m_nClientNum = 0;
private static final String m_POOL_NAME = "DefaultPool";
static private Hashtable m_hashPools = new Hashtable();
static private Vector m_vectDrivers = new Vector();
Properties m_props = null;
private String m_strDriver = null;
private String m_strURL = null;
private String m_strUser = null;
private String m_strPasswd = null;
private int m_iMaxConn = 0;
private void setProps()
{
if(m_props == null) return ;
m_strDriver = m_props.getProperty(KEY_DRIVER, "");
m_strURL = m_props.getProperty(KEY_URL, "");;
m_strUser = m_props.getProperty(KEY_USER, "");;
m_strPasswd = m_props.getProperty(KEY_PASSWD, "");;
String max = m_props.getProperty(KEY_MAXCONN,"10");
/*
m_props.list(System.out);
System.out.println("Dirver:" + m_strDriver);
System.out.println("URL:" + m_strURL);
System.out.println("User:" + m_strUser);
System.out.println("Password:" + m_strPasswd);
*/
try
{
m_iMaxConn = Integer.parseInt(max);
}
catch(NumberFormatException nfex)
{
m_iMaxConn = 10;
}
}
static synchronized public ConnectionPoolManager getInstance()
{
if (m_instance == null)
{
m_instance = new ConnectionPoolManager();
}
m_nClientNum++;
return m_instance;
}
private ConnectionPoolManager()
{
m_props = loadProps();
setProps();
init(m_POOL_NAME, m_strDriver, m_strURL, m_strUser, m_strPasswd, m_iMaxConn);
}
public void freeConnection(Connection con)
{
freeConnection(m_POOL_NAME, con);
}
public void freeConnection(String name, Connection con)
{
ConnectionPool pool = (ConnectionPool)m_hashPools.get(name);
if (pool != null)
{
pool.freeConnection(con);
}
}
public Connection getConnection()
{
return getConnection(m_POOL_NAME);
}
public Connection getConnection(String name)
{
ConnectionPool pool = (ConnectionPool) m_hashPools.get(name);
if (pool != null)
{
return pool.getConnection();
}
return null;
}
public Connection getConnection(String name, long time)
{
ConnectionPool pool = (ConnectionPool) m_hashPools.get(name);
if (pool != null)
{
return pool.getConnection(time);
}
return null;
}
public synchronized void release()
{
if (--m_nClientNum != 0)
{
return;
}
Enumeration enumAllPools = m_hashPools.elements();
while (enumAllPools.hasMoreElements())
{
ConnectionPool pool = (ConnectionPool)enumAllPools.nextElement();
pool.release();
}
Enumeration enumAllDrivers = m_vectDrivers.elements();
while (enumAllDrivers.hasMoreElements())
{
Driver strDriver = (Driver) enumAllDrivers.nextElement();
try
{
DriverManager.deregisterDriver(strDriver);
}
catch (SQLException e)
{
}
}
}
private void init(String strPoolName, String strDriver, String strURL,
String user, String passwd, int maxconn)
{
loadDriver(strDriver);
createPools(strPoolName, strURL, user, passwd, maxconn);
}
private void loadDriver(String strDriver)
{
try
{
Driver drv = (Driver)Class.forName(strDriver).newInstance();
DriverManager.registerDriver(drv);
m_vectDrivers.addElement(drv);
}
catch (Exception e)
{
}
}
private void createPools(String strPoolName, String strURL, String user,
String passwd, int maxconn)
{
ConnectionPool pool = new ConnectionPool(strPoolName, strURL, user, passwd, maxconn);
m_hashPools.put(strPoolName, pool);
}
private Properties loadProps()
{
Properties prop = new Properties();
InputStream in = null;
try
{
in = getClass().getResourceAsStream(m_propsName);
prop.load(in);
}
catch (Exception e)
{
prop = null;
System.out.println("Can not open the property file - " + m_propsName);
e.printStackTrace();
}
finally
{
try
{
in.close();
}
catch (Exception e)
{
}
}
return prop;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -