Java與Scala的兩種簡易版連線池
阿新 • • 發佈:2018-11-12
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) } }