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)
  }


}

  

posted @ 2018-11-12 20:53  Z、某某  阅读(1274)  评论(0编辑  收藏  举报