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