`

java jdbc 连接池

    博客分类:
  • java
阅读更多
经常使用hibernate,在使用hibernate的时候经常使用到DBCP和C3P0的连接池,某天自己突然想起自己来实现一个连接池。test了下,效果还可以,随记录之
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Stack;


public class ConnManager {

	private static final int MIN_CONN = 2;
	private static final int MAX_CONN = 5;
	private static final String URL = "jdbc:sqlserver://localhost:1433;DatabaseName=RJ_Thesis";
    private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    private static final String USER ="sa";  
    private static final String PASW= "sa";
    
    private int connAmount = 0;
    private static Stack<Connection> connStack ;
    
    static {
    	connStack = new Stack<Connection>();
    	try {  
            Class.forName(DRIVER);  
        } catch (ClassNotFoundException e) {  
            e.printStackTrace();  
        } 
    }
    
    private static ConnManager instance;
    
    
    public static synchronized ConnManager getInstance(){
    	if(null != instance){
    		return instance;
    	}
    	return new ConnManager();
    }
    
    
    private ConnManager(){
    	for(int i = 0 ; i < MIN_CONN ; i++){
    		connStack.push(newConnection());
    	}
    }
    
    
    public synchronized void freeConnection(Connection con){
    	connStack.push(con);
    	notifyAll();
    }
    
    public synchronized Connection getConnection(){
    	Connection con = null;
    	if(!connStack.isEmpty()){
    		con = connStack.pop();
    	}else if(connAmount < MAX_CONN){
    		con = newConnection();
    	}else{
    		try {
				wait(1000);
				return getConnection();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
    	}
    	return con;
    }
    
    private  Connection newConnection(){
    	try {
    		Connection connection = DriverManager.getConnection(URL, USER, PASW);
			++connAmount;
			return connection;
		} catch (Exception e) {
			e.printStackTrace();
		}
    	return null;
    }
	
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics