日期:2014-05-16 浏览次数:20699 次
import java.io.FileInputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.List; import java.util.Properties; import java.util.Vector; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; //采用单例模式进行设计 public class ConnectionPool { private static final ConnectionPool m_instance = new ConnectionPool(); private List<Connection> pool=null; private int initialSize = 5;//连接池的初始大小 private String driverClassName = null; private String username = null; private String password = null; private String url =null; //条件同步锁 private Lock Conlock; private Condition T; //构造一个连接池 private ConnectionPool() { init(); } // 返回单例 public static ConnectionPool getInstance() { return m_instance; } //从连接池中获得一个连接,这里采用条件同步机制 public Connection getConnetion() throws InterruptedException { Conlock.lock(); try{ while(pool.size()==0) { T.await(); } Connection con=pool.get(0); pool.remove(0); return con; } finally { Conlock.unlock(); } } //释放一个连接 public void releaseConnetion(Connection con) { Conlock.lock(); try{ pool.add(con); T.signalAll(); } finally { Conlock.unlock(); } } //关闭连接池 public synchronized void closePool() { for(int i=0;i<pool.size();i++){ try { ((Connection)pool.get(i)).close(); } catch (SQLException e) { // TODO 自动生成 catch 块 e.printStackTrace(); } pool.remove(i); } } //初始化 private void init() { pool=new Vector<Connection>(initialSize); Conlock = new ReentrantLock(); T = Conlock.newCondition(); readConfig(); creatConnection(); } //建立初始大小的连接池 private void creatConnection() { Connection con=null; for(int i=0;i<initialSize;i++) { try { con=DriverManager.getConnection(url, username, password); } catch (SQLException e) { // TODO 自动生成 catch 块 e.printStackTrace(); } pool.add(con); } } // 读取设置连接池的属性文件 private void readConfig() { try { //这里路径由用户设置,可以设置为相对路径 String path = "E:\\eclijobs\\SCStest\\dbpool.properties"; FileInputStream is = new FileInputStream(path); Properties props = new Properties(); props.load(is); this.driverClassName = props.getProperty("driverClassName"); this.username = props.getProperty("username"); this.password = props.getProperty("password"); this.url = props.getProperty("url"); this.initialSize = Integer.parseInt(props.getProperty("initialSize")); } catch (Exception e) { e.printStackTrace(); System.out.print(System.getProperty("user.dir")); System.err.println("读取属性文件出错. "); } } }
下面是属性文件,针对的是Microsoft sql。
driverClassName=com.mysql.jdbc.Driver
username=root
password=123
url=jdbc\:mysql\://localhost\:3306/selectcourse?characterEncodering\=GBk
poolSize=10