1. 程式人生 > >Java與Scala的兩種簡易版連線池

Java與Scala的兩種簡易版連線池

Java版簡易版連線池:

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.LinkedList;

/**
 * 簡易版的連線池
 */
public class ConnectionPool {
    //靜態的Connection
    private static LinkedList<Connection>connections;
    //載入驅動
    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    //獲取連線   多執行緒訪問併發問題控制
    public  synchronized static Connection getConnectoin(){
        try {
            if (connections==null){
                connections=new LinkedList<Connection>();
                for (int i =0;i<10;i++){
                    Connection conn=DriverManager.getConnection(
                            "jdbc:mysql://localhost:3306/spark",
                            "username",
                            "password"


                    );
                    connections.push(conn);
                }
            }

        }catch (Exception e){
            e.printStackTrace();
        }
        return connections.poll();
    }
    /**
     * 還連線
     * 返回連線
     */
    public static void returnConnection(Connection conn){
        connections.push(conn);
    }
}

  scala版簡易版連線池:

object ConnectionPoolUtil {
  /**
    * 需要設定的連線池資料
    */
  private val max=10//連線池總數
  private val connectionNum=10//每次產生連線數
  private val pool=new util.LinkedList[Connection]()
  private var conNum=0//當前連線池已經產生的連線數

  //獲取連線
  def getConnections(): Connection ={
    //同步程式碼塊
    AnyRef.synchronized({
      //載入驅動
      for(i<-1 to connectionNum){
        val conn = DriverManager.getConnection(
          "jdbc:mysql://localhost:3306/spark",
          "username",
          "password"

        )
        pool.push(conn)
        conNum+=1

      }
      pool.poll()
    })

  }
  //載入驅動
  def GetConn(): Unit ={
    //控制載入
    if (conNum<max && pool.isEmpty){
      Class.forName("com.mysql.jdbc.mysql.")

    }else if(conNum>=max&&pool.isEmpty){
      println("Jdbc Pool had no connection now,please wait a moments")
      Thread.sleep(2000)
      GetConn()
    }

  }
  //還連線
  def returnConn(conn:Connection): Unit ={
    pool.push(conn)
  }


}